Menu

PHPで配列に追加:array_push()と$arr[]の使い方

array_push($arr, $value)は配列の末尾に1つ以上の値を追加します。値が1つなら$arr[] = $valueでも同じことができ、こちらのほうが速いです。配列の末尾、先頭、途中への追加、キーと値の追加、定番の戻り値のバグの避け方を学びます。

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

array_push($arr, $value)は配列の末尾に値を追加します。値が1つなら、短縮形の$arr[] = $value;が関数を呼ばずに同じことをし、ほとんどのPHPのコードはこちらを使います。どちらも配列をその場で変更します。

array_push()は配列を参照で受け取るので、渡した変数を変更します。戻り値は新しい要素数で、無視してかまいません。

array_pushと$arr[] =の違い

値が1つなら$arr[] = $valueを使います。短く、関数の呼び出しも省けるので、大きなループの中では差が積み重なります。1つの文で複数の値を追加するときや、値のリストを展開して入れるときはarray_push()を使います。

$arr[] =はまだ存在しない変数にも使え、PHPが配列を作ります。array_push()には既存の配列が必要で、未定義の変数に使うとTypeError: array_push(): Argument #1 ($array) must be of type array, null givenが投げられます。

キーと値を追加する

array_push()は次の整数キーで値を追加することしかできません。名前付きのキーを追加するには、そのキーに代入します。複数のペアを一度に追加するには、+=(既存のキーを保つ)かarray_merge()(新しい値が優先)を使います。

キーがぶつかったときの+とarray_merge()の違いは、array_mergeのページで扱っています。

先頭に追加する:array_unshift

array_unshift($arr, $value)は先頭に挿入します。新しい値が添字0になるよう整数キーの番号が振り直され、文字列キーはそのままです。array_push()と同じく、複数の値を受け取り、新しい要素数を返します。

名前付きのペアを先頭に置くには、新しい配列を作ります:$menu = ['login' => '/login'] + $menu;。

指定した位置に挿入する

array_splice($arr, $offset, 0, $values)は何も削除せずに挿入します。$offsetから始めて0個の要素を削除し、そこに新しい値を置きます。挿入位置より後ろの整数キーは番号が振り直されます。

array_splice()は要素の削除や置き換えにも使えます。それらの形は要素を削除するページで紹介しています。

別の配列を追加する

array_push($a, $b)は$bを1つのネストした要素として追加しますが、これが望みであることはまれです。$bの値を1つずつ追加するには展開するか、スプレッド構文やarray_merge()で新しい配列を作ります。

よくあるミス:戻り値を代入する

array_push()は数値、つまり新しい要素数を返します。それを配列の変数に代入し直すと配列が整数に置き換わり、次にその変数でarray_push()を呼ぶとTypeErrorが投げられます。

同じことがarray_unshift()と、trueを返すsort()にも当てはまります。配列をその場で変更する関数は、配列ではなく状態を返します。

よくある質問

PHPのarray_pushと$arr[]の違いは何ですか?

どちらも末尾に追加します。$arr[] = $x;は関数を呼ばずに値を1つ追加するので、よく使われ、少し速いです。array_push($arr, $a, $b, $c)は複数の値を一度に追加するときに便利で、新しい要素数を返します。

PHPで配列にキーと値を追加するには?

キーに代入します:$arr['color'] = 'blue';。array_push()は常に次の整数キーを使うので、これはできません。複数のペアを一度に追加するには、$arr += ['a' => 1, 'b' => 2];かarray_merge()を使います。

PHPで配列の先頭に要素を追加するには?

array_unshift($arr, $value)を使います。新しい値が添字0になるよう整数キーの番号を振り直し、文字列キーはそのまま保ちます。

array_pushのあと配列が数値になってしまうのはなぜですか?

array_push()は配列ではなく、新しい要素数を返すからです。$arr = array_push($arr, 'x');と書くと、配列がその数値に置き換わります。単独の行で呼び出してください:array_push($arr, 'x');。

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

Coddyでコードを学ぼう

始める