AIにPHPを書いてもらったら、こんなコードが出てきました。
echo $users[0]['name'];
……なんだこれ。
$users という変数なのは分かる。
でも、
[0]
が付いて、
さらに、
['name']
まで付いている。
カッコが多い!
ところが、この書き方はPHPで非常によく登場します。
特に、
- データベースから取得したデータ
- フォームの複数データ
- APIから取得したデータ
- JSONをPHPで扱うとき
- AIが生成したPHP
などでは避けて通れません。
今回は、そんな**PHPの「配列」**を調査してみましょう。
今日のゴールは、
$users[0]['name']
を見たときに、
「ああ、そういうことね」
と読めるようになることです。
1. 事件発生!変数だらけになった
例えば、好きな食べ物を3つ保存したいとします。
これまで習った変数を使えば、
$food1 = 'カレー';
$food2 = 'ラーメン';
$food3 = '寿司';
と書けます。
3つくらいなら問題ありません。
でも、100個あったらどうでしょう。
$food1 = 'カレー';
$food2 = 'ラーメン';
$food3 = '寿司';
$food4 = 'うどん';
$food5 = 'そば';
// まだまだ続く……
これは大変です。
そこでPHPには、
複数の値をひとまとめにする仕組み
があります。
それが、
配列(array)
です。
2. 配列を作ってみよう
先ほどの食べ物を配列にすると、
$foods = [
'カレー',
'ラーメン',
'寿司'
];
となります。
$foods という1つの変数の中に、
カレー
ラーメン
寿司
という3つの値が入っています。
イメージとしては、
$foods
├─ カレー
├─ ラーメン
└─ 寿司
です。
つまり配列とは、
「複数のデータをまとめて入れられる箱」
くらいに考えておけばOKです。
3. 配列の中から1つだけ取り出す
では、「カレー」だけ表示してみましょう。
こう書きます。
echo $foods[0];
結果は、
カレー
です。
次は、
echo $foods[1];
結果は、
ラーメン
そして、
echo $foods[2];
なら、
寿司
です。
ここで重要なのが、
PHPの配列は基本的に0から数え始める
ということです。
[0] → カレー
[1] → ラーメン
[2] → 寿司
1番目なのに [0]。
最初はかなり違和感があります。
でもプログラミングではよくある考え方なので、
「最初は0」
と覚えておきましょう。
4. 名前を付けて保存することもできる
PHPの配列には、もうひとつ非常によく使う形があります。
例えば、ユーザーの情報です。
$user = [
'name' => 'みのり',
'age' => 18,
'favorite' => 'ココア'
];
前に勉強した、
=>
が出てきました。
覚えていますか?
=> は、
キーと値を関連付ける
ときに使います。
例えば、
'name' => 'みのり'
なら、
name → みのり
という組み合わせです。
そのため、
echo $user['name'];
と書けば、
みのり
が表示されます。
同じように、
echo $user['age'];
なら、
18
です。
これを連想配列と呼びます。
名前は少し難しいですが、
「番号ではなく、名前を付けて値を管理できる配列」
と考えれば十分です。
5. 前に習った「=>」とつながった!
以前の記事で、
->
と、
=>
の違いを勉強しました。
そのとき、
$user = [
'name' => 'みのり'
];
のようなコードを見ましたね。
今回、その意味がさらに分かるようになりました。
'name' => 'みのり'
で保存して、
$user['name']
で取り出す。
つまり、
$user = [
'name' => 'みのり'
];
echo $user['name'];
という一連の流れになります。
PHPの知識が少しずつつながってきました。
6. いよいよ $users[0]['name'] を解読する
では今回の本題です。
AIがこんなコードを書きました。
$users = [
[
'name' => 'みのり',
'age' => 18
],
[
'name' => '田中',
'age' => 25
],
[
'name' => '佐藤',
'age' => 32
]
];
急に難しく見えますね。
でも、分解すれば簡単です。
まず $users の中には、3人分のデータがあります。
$users
[0]
├─ name → みのり
└─ age → 18
[1]
├─ name → 田中
└─ age → 25
[2]
├─ name → 佐藤
└─ age → 32
では、
$users[0]
は何でしょう。
0番目なので、
みのりのデータ全部
です。
そして、
$users[0]['name']
なら、
まず、
$users[0]
で「0番目の人」を選び、
その中から、
['name']
を取り出します。
つまり、
echo $users[0]['name'];
結果は、
みのり
です。
7. 左から順番に読むと簡単
こういうコードは、左から順番に読んでみましょう。
$users[1]['name']
まず、
$users
ユーザー一覧。
次に、
[1]
1番のユーザー。
最後に、
['name']
そのユーザーの名前。
つまり、
「ユーザー一覧 → 1番 → 名前」
です。
結果は、
田中
ですね。
では、
$users[2]['age']
なら?
「ユーザー一覧 → 2番 → 年齢」
なので、
32
です。
カッコの数に驚かず、左から順番に絞り込んでいくのがコツです。
8. データベースでも似たものを見る
PHPでデータベースを扱うようになると、複数のデータをまとめて取得することがあります。
例えばイメージとして、
$users = [
[
'id' => 1,
'name' => '山田'
],
[
'id' => 2,
'name' => '田中'
]
];
のようなデータが返ってくることがあります。
そのため、
$users[0]['name']
のようなコードが頻繁に登場します。
さらにフレームワークや取得方法によっては、
$users[0]->name
のようになる場合もあります。
ここで、
「あれ? ['name'] じゃなくて ->name になった!」
となりますね。
でも、これまでの記事を読んでいれば違いに気付けます。
$user['name']
と、
$user->name
では、扱っているデータの形が違います。
この違いも、今後もう少し詳しく扱います。
9. 配列の中身が分からないときは?
AIが書いたPHPを修正していると、
$data['user']['profile']['name']
なんてコードが出てくることがあります。
「もう何が入っているのか分からない!」
そんなときに便利なのが、
var_dump($data);
です。
例えば、
$foods = [
'カレー',
'ラーメン',
'寿司'
];
var_dump($foods);
とすると、配列の中身を確認できます。
開発中に、
「この変数、いったい何が入っているんだ?」
と思ったときには非常に便利です。
AIにコードを直してもらうときにも、
var_dump($data);
の結果を伝えることで、原因を特定しやすくなる場合があります。
10. よく見るエラーも読めるようになる
以前の記事で、
Undefined array key
という警告を扱いました。
今回、ようやくこのエラーの意味がもっとはっきりします。
例えば、
$user = [
'name' => 'みのり'
];
echo $user['email'];
とします。
でも、この配列には、
'email'
がありません。
あるのは、
'name'
だけです。
そのため、
Undefined array key "email"
のような警告が出ることがあります。
つまり、
「そのキー、配列の中にないよ!」
ということです。
以前はエラー文として覚えたものが、PHPの仕組みとして理解できるようになってきました。
11. AIが書いたコードを読むときのコツ
例えばAIが、
$name = $result['data']['users'][0]['name'];
と書いたとします。
一瞬、かなり難しく見えます。
でも、今回の読み方を使えば、
$result
↓
['data']
↓
['users']
↓
[0]
↓
['name']
と追えます。
つまり、
resultの中のdata → users → 最初のユーザー → name
です。
全部のコードを書けなくてもいい。
でも、
データの中を順番にたどっている
と分かれば、AIが書いたコードを読む力は大きく上がります。
今日の合格ライン
今日覚えて帰ることは、この5つです。
- 配列は複数の値をまとめて扱える
[0]は最初のデータ['name']のように名前を使って値を取り出せる$users[0]['name']は左から順番に読む- 中身が分からなければ
var_dump()で確認できる
特に、
$users[0]['name']
を見て、
「usersの最初のデータにあるnameね」
と読めれば、今日の授業は合格です。
ワンポイント答え合わせ
Q1. 次の結果は?
$colors = [
'赤',
'青',
'黄色'
];
echo $colors[0];
A. 赤
B. 青
C. 黄色
正解:A
配列は0から数えるので、[0] は最初の「赤」です。
Q2. 次の結果は?
$user = [
'name' => 'みのり',
'age' => 18
];
echo $user['name'];
A. name
B. みのり
C. 18
正解:B
name というキーに対応している値は「みのり」です。
Q3. 次のコードは何を取り出している?
$users[1]['email']
A. 最初のユーザーのメールアドレス
B. 2番目のユーザーのメールアドレス
C. 1番目のユーザーの名前
正解:B
PHPでは [0] が最初なので、[1] は2番目のデータです。
AI時代だからこそ、磨こう。その腕。
AIが作るPHPでは、配列が大量に登場します。
データベース、API、フォーム、設定ファイル。
実際のWeb制作では、
$data['users'][0]['name']
のようなコードも珍しくありません。
AIなら、そのコード自体は一瞬で書けます。
だから全部を暗記する必要はありません。
でも、
「このコードは、どのデータを取り出そうとしているのか」
を読めるようになるだけで、エラーが起きたときの見え方は大きく変わります。
1から全部書く必要はない。
だが、知る必要はある。
次回は、この配列と非常に相性のいい、
「同じ処理を何回書くの?」PHPのforeachで配列を順番に処理しよう
へ進みましょう。
$users[0]、$users[1]、$users[2]……と1個ずつ書く必要はありません。
配列が分かった直後だからこそ、foreach がものすごく分かりやすくなります。
