Menu

PHPの配列:作成・取得・ループ・出力の基本

PHPの配列は値の順序付きリストで、各値はキーの下に格納されます:$fruits = ['apple', 'banana']; は$fruits[0]で読めます。配列の作り方、要素の読み書き、ループ、出力、そしてどの配列関数を使えばよいかを学びます。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

PHPの配列は、値のリストをキーの下に格納します。角括弧で作り($fruits = ['apple', 'banana', 'cherry'];)、要素は添字で読みます($fruits[0])。添字は0から始まり、count($fruits)で要素数がわかります。

PHPの配列はすべて順序付きのマップで、各値はキーの下にあります。キーを選ばなければPHPが0, 1, 2...と番号を振り、インデックス配列になります。自分でキーを選べば(['name' => 'Ada'])、連想配列になります。どちらも同じarray型です。

配列を作る

ふつうは角括弧の構文を使います。array()は古い書き方で、まったく同じものを作ります。range()は数字や文字のリストを作り、array_fill()は1つの値を繰り返します。

PHPの配列は、ほかの配列も含め、異なる型の値を同時に持てます。配列の配列は多次元配列で、データの行を持つときの定番の方法です。

最初と最後の要素を取得する

PHPには負の添字がありません。$arr[-1]は「最後の要素」という意味ではなく、-1という名前のキーを探し、それがなければWarning: Undefined array key -1を表示します。キーが0から始まらない場合にも使えるarray_key_first()とarray_key_last()を使いましょう。

end($queue)も最後の値を返しますが、副作用として配列の内部ポインターを動かすので、キーを使う方法のほうがわかりやすい選択です。

配列を出力する

echo $arrは動きません。Arrayという単語と警告を表示します。目的に合った出力方法を選びましょう。

  • print_r($arr):デバッグ中に読みやすく表示する。
  • var_dump($arr):各値の型と長さも見る。
  • implode(', ', $arr):表示用に値を1つの文字列にする。
  • json_encode($arr):配列をJavaScriptやAPIに送る。

HTMLの中で配列を出力する方法を含む書式のオプションは、print_rとvar_dumpのページで扱っています。

配列をループする

foreachは配列のために作られたループで、各値を、求めればキーも渡してくれます。添字を使うforループも、キーが0から欠番なく続くインデックス配列なら使えます。

配列は共有されずにコピーされる

配列を別の変数に代入したり、関数に渡したりするとコピーが渡されます。コピーを変えても元の配列はそのままです。関数で呼び出し元の配列を変えたいときは、引数に&を付けます。

目的別の配列関数

PHPには70以上の配列関数があります。よく使うのは次のもので、それぞれに専用のページがあります。

やりたいこと関数
末尾に追加するarray_push()または$arr[] =
要素数count()
値が存在するか確認するin_array()
値のキーを探すarray_search()
キーが存在するか確認するarray_key_exists()
配列を結合するarray_merge()
すべての値を変換するarray_map()
一部の値を残すarray_filter()
並べ替えるsort()、usort()など
要素を削除するunset(), array_splice()
一部を取り出すarray_slice()
重複を取り除くarray_unique()
文字列と配列の相互変換explode(), implode()

黙ってまとめられてしまうキー

配列のキーは整数か文字列で、PHPは一部のキーを自動で変換します。"1"のように整数の10進表記に見える文字列は整数の1になるので、$a["1"]と$a[1]は同じ場所です。"01"と"1.5"は文字列のままです。フォームの入力やCSVから作った配列の要素数が予想より少なくなることがあるのは、このためです。

よくある質問

PHPで配列を作るには?

角括弧を使います:$colors = ['red', 'green', 'blue'];。空の配列は$items = [];です。古いarray('red', 'green')構文も同じことをし、今でも動きます。

PHPで配列を出力するには?

echoでは配列を出力できません(Arrayという単語と警告が表示されます)。読みやすく表示するにはprint_r($arr)、型も見るにはvar_dump($arr)、値を1行で出力するにはecho implode(', ', $arr)を使います。

PHPで配列の最後の要素を取得するには?

$arr[array_key_last($arr)](PHP 7.3以降)かend($arr)を使います。PHPには負の添字がありません:$arr[-1]は-1という名前のキーを探し、たいていそれは存在しません。

PHPの配列は値渡しですか、参照渡しですか?

値渡しです。$b = $a;で$bは自分のコピーを持つので、$bを変えても$aは変わりません。関数の中で呼び出し元の配列を変更するには、引数を参照として宣言します:function add(array &$list)。

PHPのインデックス配列と連想配列の違いは何ですか?

同じ型です。インデックス配列はPHPが割り当てる整数のキー0, 1, 2...を持ち、連想配列は自分で選んだキー(たいてい'name'のような文字列)を使います。1つの配列で両方を混ぜることもできます。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める