【PHP】配列・連想配列の先頭に要素を追加する方法
更新日:2024/02/27
PHPで配列や連想配列の先頭に、値を追加する方法をお伝えします。
配列の先頭に要素を追加
配列の先頭に要素を追加する方法は、いくつかあります。
ここでは3つの方法をお伝えします。
array_unshift()を使用
array_unshift()は、配列の先頭に要素を追加します。
$array = array( 1,2,3 );
$result = array_unshift($array,10);
var_dump( $result ); // 4
var_dump( $array ); // { [0]=>10 , [1]=>1 , [2]=>2 , [3]=>3 }
array_unshift()の構文は、次のようになっています。
追加後の要素数 = array_unshift( 追加先の配列 , 追加する値1 , 追加する値2 ... )
配列要素を展開して追加するときはforeach等で一つずつ処理していく必要がありますが、PHP7.4以降なら...演算子が使用できます。
...演算子は、他言語でスプレッド演算子と呼んでいるものですね。
$array = array( 1,2,3 );
$add_array = array( 10 , 11 );
$result = array_unshift($array,...$add_array);
var_dump( $result ); // 5
var_dump( $array ); // { [0]=>10 , [1]=>10 , [2]=>1 , [3]=>2 , [4]=>3 }
array_merge()を使用
array_merge()は配列と配列を結合した結果を返します。
$array = array( 1,2,3 );
$add_array = array( 10 , 11 );
$new_array = array_merge($add_array,$array);
var_dump( $new_array ); // { [0]=>10 , [1]=>10 , [2]=>1 , [3]=>2 , [4]=>3 }
array_merge()の構文は、次のようになっています。
結合後の配列 = array_merge( 配列1 , 配列2 ... )
引数で指定した順番で結合していくので、配列の先頭に要素を追加するときは追加する配列を始めに指定すればOKです。
なお、array_unshift()と異なり、元となる配列の内容は変化しません。
[ ...配列 , ...配列 ]を使用
...演算子を上手く使うと、array() や [ ]で配列を結合できます。
$new_array2 = array( ...$add_array , ...$array );
$new_array3 = [ ...$add_array , ...$array ];
var_dump( $new_array2 ); // { [0]=>10 , [1]=>10 , [2]=>1 , [3]=>2 , [4]=>3 }
var_dump( $new_array3 ); // { [0]=>10 , [1]=>10 , [2]=>1 , [3]=>2 , [4]=>3 }
array_merge()のケースと同じように、配列の先頭に要素を追加するときは追加する配列を始めに指定すればOKです。
連想配列の先頭に連想配列を追加
連想配列の先頭に要素を追加する方法は、2つあります。
配列のケースと対比してお伝えします。
array_unshift()はNG
配列では有効だったarray_unshift()は、連想配列では使用できません。
$array = array( 'a'=>1,'b'=>2,'c'=>3 );
$add_array = array( 'x'=>10 , 'y'=>11 );
$result = array_unshift($array,...$add_array);
// PHP Fatal error: Uncaught ArgumentCountError: array_unshift() does not accept unknown named parameters
連想配列を...演算子で展開すると、エラーになります。
array_merge()は使用可能
array_merge()は使用できます。
$array = array( 'a'=>1,'b'=>2,'c'=>3 );
$add_array = array( 'x'=>10 , 'y'=>11 );
$new_array = array_merge($add_array,$array);
var_dump( $new_array ); // { 'x'=>10,'y'=>11,'a'=>1,'b'=>2,'c'=>3 }
ただし連想配列は同じキーを複数所持できないので、後に指定した連想配列の値で上書きされます。
$array = array( 'a'=>1,'b'=>2,'c'=>3 ,'x'=>999);
$add_array = array( 'x'=>10 , 'y'=>11 );
$new_array = array_merge($add_array,$array);
var_dump( $new_array ); // { 'x'=>999,'y'=>11,'a'=>1,'b'=>2,'c'=>3 }
[ ...配列 , ...配列 ]は使用可能
連想配列は array() や [ ]で...演算子を使用できます。
$array = array( 'a'=>1,'b'=>2,'c'=>3 ,'x' => 100);
$add_array = array( 'x'=>10 , 'y'=>11 );
$new_array2 = array( ...$add_array , ...$array );
$new_array3 = [ ...$add_array , ...$array ];
var_dump( $new_array2 ); // { 'x'=>999,'y'=>11,'a'=>1,'b'=>2,'c'=>3 }
var_dump( $new_array3 ); // { 'x'=>999,'y'=>11,'a'=>1,'b'=>2,'c'=>3 }
array_merge()と同じように、キーが重複すると後の値で上書きされます。
更新日:2024/02/27
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。