こんにちは、かつコーチです。
前回は for ・ while ・ foreach を使った繰り返し処理を解説しました。
今回のテーマは「配列」です。
配列は、繰り返し処理とセットで使う場面がとても多く、PHPを書くうえで避けて通れない基本機能です。
「変数はひとつの値しか入れられないけど、複数のデータをまとめて扱いたい」——そんなときに配列が活躍します。
配列とは?
配列の役割
配列(はいれつ)とは、複数の値をひとつの変数にまとめて格納できる仕組みのことです。
たとえば「好きな果物を3つ管理したい」場合、普通の変数だとこうなります。
<?php
$fruit1 = "りんご";
$fruit2 = "みかん";
$fruit3 = "ぶどう";
?>
これだと果物が増えるたびに変数を増やす必要があり、管理が大変です。
配列を使うと、これを1つの変数にまとめられます。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
?>
前回学んだ foreach は、この配列の中身を1つずつ取り出して処理するための構文でした。
配列と繰り返し処理は、いわばセットの存在です。
なぜ配列が必要なのか
実務では「ユーザー一覧」「商品リスト」「フォームで送られてきた複数のチェックボックスの値」など、複数のデータをまとめて扱う場面が非常に多いです。
配列を使わずに1件ずつ変数を作っていたら、コードはあっという間に破綻します。
配列を覚えることで、こうした「複数件のデータをまとめて処理する」という、実務で最も頻繁に使う考え方が身につきます。
配列の基本的な使い方
配列を作る
配列を作るには [](角括弧)を使います。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
?>
古い書き方として array() という関数を使う方法もありますが、現在は [] の方が主流です。
<?php
// 古い書き方(今も動くが、現在はあまり使われない)
$fruits = array("りんご", "みかん", "ぶどう");
?>
社内の古いシステムを触ると array() で書かれたコードに出会うこともあるので、両方の書き方を知っておくと安心です。
添字(インデックス)で値を取り出す
配列の中の値には、それぞれ添字(インデックス)と呼ばれる番号が自動で振られます。
添字は 0 から始まる点に注意してください。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
echo $fruits[0]; // りんご
echo $fruits[1]; // みかん
echo $fruits[2]; // ぶどう
?>
「1番目だから $fruits[1]」ではなく、「1番目は $fruits[0]」という点が最初は混乱しやすいポイントです。
値を追加する
配列の末尾に値を追加するには、$配列名[] = 値 という書き方を使います。
<?php
$fruits = ["りんご", "みかん"];
$fruits[] = "ぶどう";
print_r($fruits);
// 出力:
// Array
// (
// [0] => りんご
// [1] => みかん
// [2] => ぶどう
// )
?>
[] の中に数字を書かずに空にしておくと、PHPが自動で「次の番号」を割り振って追加してくれます。
配列の中身を確認したいときは、echo ではなく print_r() を使うと構造ごと見えるので便利です。
値を更新・削除する
添字を指定すれば、既存の値を上書きできます。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
$fruits[1] = "もも"; // 「みかん」を「もも」に上書き
print_r($fruits);
// 出力:
// Array
// (
// [0] => りんご
// [1] => もも
// [2] => ぶどう
// )
?>
削除には unset() を使います。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
unset($fruits[1]); // 「みかん」を削除
print_r($fruits);
// 出力:
// Array
// (
// [0] => りんご
// [2] => ぶどう
// )
?>
unset() で削除しても、添字は詰め直されない点に注意してください。
[1] が消えたまま [0] と [2] だけが残る、という状態になります。
配列と繰り返し処理を組み合わせる
前回学んだ foreach を使うと、配列の中身を1つずつ簡単に取り出せます。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
foreach ($fruits as $fruit) {
echo $fruit . "\n";
}
// 出力:
// りんご
// みかん
// ぶどう
?>
添字も同時に使いたい場合は、as $key => $value の形にします。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
foreach ($fruits as $index => $fruit) {
echo ($index + 1) . "番目: " . $fruit . "\n";
}
// 出力:
// 1番目: りんご
// 2番目: みかん
// 3番目: ぶどう
?>
よくあるつまずきポイント・エラー対処
存在しない添字にアクセスしてしまう
私が実際にやってしまった失敗のひとつが、配列の要素数を数え間違えて、存在しない添字にアクセスしてしまうミスです。
❌ Before:配列の範囲外にアクセスしてしまう
<?php
$fruits = ["りんご", "みかん", "ぶどう"]; // 添字は0, 1, 2
echo $fruits[3]; // 存在しない添字にアクセス
?>
このコードを実行すると、次のような警告が表示されます。
Warning: Undefined array key 3 in /path/to/file.php on line 4
私は最初「3つ入っているから [3] でいけるはず」と勘違いして、この警告に何度も遭遇しました。
原因は単純で、要素数が3個なら添字は 0, 1, 2 までしか存在しない、という基本を忘れていたことです。
✅ After:isset() や count() で存在確認してからアクセスする
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
if (isset($fruits[3])) {
echo $fruits[3];
} else {
echo "3番目の要素は存在しません";
}
// 配列の要素数を確認する
echo "要素数: " . count($fruits); // 要素数: 3
?>
isset() で添字が存在するかを事前に確認する、もしくは count() で要素数そのものを確認する癖をつけると、この手のミスを未然に防げます。
「配列の最後の添字は count($配列) - 1」という関係を意識しておくと、範囲外アクセスのミスがぐっと減ります。
配列同士を安易に == で比較してしまう
もうひとつよくあるのが、配列の中身を確認したいときに、if 文で配列そのものを直接比較しようとしてエラーになるケースです。
<?php
$fruits = ["りんご", "みかん"];
if ($fruits == "りんご,みかん") {
echo "一致";
}
// 意図した通りに動かない(配列と文字列は型が違うため一致しない)
?>
配列の中身を確認したいときは、比較演算子ではなく in_array() を使うのが正解です。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
if (in_array("みかん", $fruits)) {
echo "みかんは配列に含まれています";
}
?>
in_array() は「指定した値が配列の中に含まれているか」を true / false で返してくれる関数です。
応用・一歩先の使い方
配列を関数に渡して処理する
配列は関数の引数としてもよく使われます。
<?php
function totalPrice($prices) {
$total = 0;
foreach ($prices as $price) {
$total += $price;
}
return $total;
}
$cartPrices = [1200, 3000, 500];
echo "合計金額: " . totalPrice($cartPrices) . "円";
// 出力: 合計金額: 4700円
?>
「配列をまるごと関数に渡して、中でループ処理する」というパターンは、実務でも非常によく使う型です。
関数の作り方や引数の扱いについては、次回の記事で詳しく解説します。
配列を操作する便利な関数
PHPには配列を操作するための便利な関数が数多く用意されています。
代表的なものだけでも押さえておきましょう。
<?php
$numbers = [5, 3, 8, 1];
sort($numbers); // 昇順に並び替え
print_r($numbers); // [1, 3, 5, 8]
$total = array_sum($numbers); // 合計を計算
echo $total; // 17
$count = count($numbers); // 要素数を取得
echo $count; // 4
?>
こうした関数を知っておくと、自分でループを書かなくても一発で処理できる場面が増えます。
まとめ
この記事のポイント
- 配列は複数の値をひとつの変数にまとめて扱う仕組み
- 添字は
0から始まる(3つの要素なら添字は0, 1, 2) - 追加は
$配列[] = 値、削除はunset() - 存在しない添字へのアクセスは
Warning: Undefined array keyの原因になるためisset()やcount()で確認する foreachと組み合わせることで、配列の中身を効率よく処理できる
次に読むべき記事
配列の基本が分かったら、次は「キーに名前をつけられる配列」である連想配列を学んでいきましょう。
→ 次の記事:PHPの連想配列を使いこなす