Menu
Coddy logo textTech
学習パス

PHPのデータ構造とアルゴリズム

PHPでは、ひとつの型がほぼすべてをこなします。arrayは順序付きのハッシュマップで、リストにも辞書にもスタックにもなります。このパスでは、配列が代わりを務めている構造と、配列では代わりになれない構造をPHPで作り、それを使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。

377 レッスン228 チャレンジ702 クイズの問題

  • 初心者向け
  • sparkles iconAIによるコーディングサポート
  • hint icon実践的なインタラクティブレッスン
  • volume On icon全レッスンに音声ナレーション付き
  • quiz icon知識を確かめるクイズ
  • certificate iconパス全体で23枚の無料修了証

PHPのDSA、ステップごとに

38 コース377 レッスン228 チャレンジ702 クイズの問題

各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをPHPで開きます。まだPHPで教えていない3つのコースは、ステップの後にまとめて載せています。

  1. 1
    このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをPHPでゼロから実装し、実際に問題を解くのに使います。これを終えると、arrayがスタックとして優秀なのはどんなときか、array_shiftがなぜキューに向かないのか、そしてすべての配列の中にあるハッシュマップが何をしてくれているかがわかります。開始
  2. 2
    このステップを始める開始双方向連結リスト、ヒープと優先度付きキュー、トライ木、グラフ、そして自己平衡するAVL木。これを終えると、SplDoublyLinkedListは自分で書いたことのある構造になり、SplMinHeapSplMaxHeapは向きが逆なだけの同じ考え方になり、PHPに用意されていない平衡木も自分で作れるようになります。開始
  3. 3
    このステップを始める開始バブル、選択、挿入、マージ、クイック、ヒープ、計数、基数ソートを、PHPで書き、可視化ツールで眺めます。sort()はPHP 8.0から安定です。このステップを終えれば、その約束が何を意味するのか、8つのソートのうちどれならそれを守れるのかがわかります。開始
  4. 4
    このステップを始める開始PHPでの再帰のチャレンジ問題。名前付き関数は自由に自分自身を呼び出せますが、無名関数はまず$f = function ($n) use (&$f) { ... }のように自分自身を参照でキャプチャしなければなりません。面接で再帰的なクロージャを求められる前に、知っておきたい細部です。動的計画法とビット演算は、それぞれPythonとC++で教えているため、ステップの後にまとめて載せています。開始専用ページ
  5. 5
    このステップを始める開始幅優先探索と深さ優先探索、ダイクストラ法、ベルマン・フォード法、トポロジカルソート、クラスカル法とプリム法を、ステップ2で作ったグラフの上でPHPで学びます。SplPriorityQueueは最大ヒープなので、ダイクストラ法では距離の符号を反転させるか、ステップ2で自作したヒープを使います。開始
  6. 6
使える機能
コーディングを学ぶために使うすべて

Learn by Doing

Write real code, query databases, build websites, and master AI prompts. Our interactive lessons cover every skill modern developers need.

playground.js
Code Editor
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Test #1test Case Success icon
Test #2test Case Success icon
Test #3test Case Failure icon
Input
"Alex"
Output
"Hello, Coddy! Alex"

Build Your Coding Streak

Stay consistent and watch your progress grow! Track your daily coding habit, protect your streak with freeze days, and earn rewards for showing up every day.

12 days streak

Return tomorrow to keep your streak!

fire Filled icon
left icon

January 2026

right icon

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

21

22

23

24

25

26

27

28

29

30

product Double Or Nothing icon

Double or Nothing

Day 5 of 7

fire Freeze icon

Streak Freeze

2 left

Code Anywhere, Anytime

Take your coding journey on the go! No setup, no downloads - just open and start coding. Available on iOS, Android and Web with 4.9 star ratings.

Python
7Streak
250Score
5Energy
Variables
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
CONTINUE
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
Journey
Goals
Leaderboard
Profile
4.9
StarStarStarStarStar
Rating

You're Not Alone in This

Compete on global leaderboards, invite friends to earn rewards, and celebrate each other's wins. Coding is better with friends!

Challenger League
Challenger LeagueTop 7 advance
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up iconPromotion zoneleaderboard Arrow Up icon

Every way to learn

Read, listen, test yourself, ask the AI, or look up anything you've already covered. Every lesson meets you where you are.

Intro to Variables
Audio

A variable is a named container that stores a value you can reference later in your program.

In Python, you create one by writing the name, an equals sign, then the value you want to store.

The value can change over time - reassigning the name simply points it to a new value.

1xSarah

Prove Your Skills

Earn certificates for every course you complete. Add them to your LinkedIn profile and resume to showcase your coding expertise to employers.

CoddyCertificate of Completion
This certifies thatJohn Doehas successfully completed
python iconPython Fundamentals
Verified
DateJan 2026
LinkedInAdd to LinkedIn

PHPのDSAをCoddyで学ぶ理由

  • arrayの正体。PHPのarrayは順序付きのハッシュマップです。だから$a[] = $x$a['key'] = $xも動き、array_shiftは遅いのです。残りのすべての要素に番号を振り直すからです。本物のスタック、キュー、ハッシュテーブルを作ることで、配列のどの操作が安く、どの操作がひそかに高いのかがわかります。
  • Web開発者のためのアルゴリズム。PHPはWordPressやLaravelを動かしており、遅いページの正体が、実はアルゴリズムの問題だということもあります。ループの中のin_arrayは毎回の線形探索ですが、キー付きの配列に対するissetは平均で定数時間です。面接を突破する考え方は、そのページを直す考え方でもあります。
  • パスのほぼすべてをPHPで。データ構造、ソート、グラフアルゴリズム、再帰のチャレンジ、面接パックは、すべてPHPで教えています。別の言語で教える3つのコースは、それぞれへのリンクとともにステップの後にまとめて載せています。動的計画法とPython面接シリーズ(Python)、そしてビット演算(C++)です。ビット演算はPHPからも楽に読めます。PHPにはC++の&|^~<<>>があるからです。
  • 面接と同じ形で採点。どのレッスンもテストケースで確認されるPHPのチャレンジで終わり、失敗したときはBugsyがあなたのコードを読み、答えを教えずに修正の方向へ導きます。ほとんどのコースで無料の修了証が発行され、それぞれ専用URLで検証できます。

PHPでのDSA学習についてよくある質問

PHPはデータ構造とアルゴリズムの学習に向いていますか?

学ぶためなら、はい。ただし、何にでもarrayを使うという習慣をひとつ捨てればの話です。PHPの配列はリストにも辞書にもスタックにもなれるほど柔軟で、まさにそれが各操作のコストを隠してしまいます。構造を自分で作れば、PHPはアルゴリズムを考えるのに十分な言語であり、PHPが仕事なら面接で使うのに自然な言語でもあります。

SPLのどのクラスが、どのデータ構造にあたりますか?

SplStackSplQueueはスタックとキューで、どちらもSplDoublyLinkedListの上に作られています。SplMinHeapSplMaxHeapはヒープ、SplPriorityQueueは優先度順の最大ヒープ、SplFixedArrayは整数インデックスの固定長配列で、arrayより少ないメモリで済みます。ハッシュテーブルには素のarrayを使います。木、トライ木、グラフのクラスはないので、それらはステップ1と2で自分で書きます。

PHPでは、なぜキューにarray_shiftを使うと遅いのですか?

先頭の要素を取り除いたあと、残りのすべての整数キーをゼロから振り直すので、配列全体に手が入るからです。array_shiftの上に作ったキューは、デキューのたびにO(n)、空にするまでに2乗の時間がかかります。代わりにSplQueueを使うか、配列の先頭インデックスを持って進めていきましょう。ステップ1ではキューを自分で作ります。違いを確かめるには、それがいちばん確実な方法です。

PHPのsort()は安定ですか?

PHP 8.0以降は安定です。sort()usort()asort()をはじめとするソート関数は、等しい要素を元の順序のまま保ちます。8.0より前はそうした約束がなかったので、等しい要素の順序に依存するコードは、バージョンによって動作が変わることがありました。ステップ3の8つのソートのうち、マージソートと挿入ソートは安定で、クイックソートとヒープソートは安定ではありません。その理由は、ステップ3を終えればわかります。

このパスで、PHPで教えていないコースはどれですか?

3つです。動的計画法とPython面接シリーズはPythonで、ビット演算はC++で教えています。これらはステップの後にまとめて載せてあり、それぞれのリンクからその言語でコースを開けます。PHPならメモ化テーブルは部分問題をキーにしたarrayです。ビットのテクニックを移植するときの落とし穴がひとつあります。&|^の両方のオペランドが文字列だと、PHPは各文字のバイト値に対して演算を行い、文字列を返します。まず値が整数であることを確かめましょう。

このパスを始める前に、PHPを知っている必要がありますか?

少なくとも、関数、配列、ループ、クラスは必要です。ノードは$nextプロパティを持つオブジェクトとして書くのが自然だからです。初めて見るものがあれば、まずCoddyのPHPコースが無料でそこまで連れて行ってくれます。このパスは、そのコースが終わるところから始まります。

他の学習パス

同じコースを別の職種向けに並べたものです。進捗は引き継がれ、あるパスで修了したコースは、それを含むすべてのパスで修了扱いになります。

すべての学習パス
Coddy programming languages illustration

データ構造とアルゴリズムパスを無料で始める

学習を始める