phpで配列に要素を追加するための2つのメソッドの違いについてのメモ。
今日仕事で使っていてハマったのでメモ。
やりたかったことはこういう事。
[1, 2, 3] + [4, 5, 6] => [1, 2, 3, 4, 5, 6]
そこで調べてみたところ、array_merge
とarray_push
という2つのメソッドに行き着いた。
結果的に欲しかったのはarray_merge
なのだが、この2つはそれぞれ用法が似ているようで異なっている。
<?php $a = [1, 2, 3]; $b = [4, 5, 6]; $c = array_merge($a, $b); // $c: [1, 2, 3, 4, 5, 6] $a = [1, 2, 3]; $b = [4, 5, 6]; array_push($a, $b); // $a: [1, 2, 3, [4, 5, 6]]
まず、array_merge
。
これはそれぞれの配列の要素をまとめて、新しい配列として返すメソッドである。
このメソッドの場合、元の配列には影響がない。
次にarray_push
。
これは第1引数の配列の末尾に第2引数の要素を追加するメソッドである。
これを実行した場合、第1引数の配列が直接書き換えられている。
冷静に処理内容を考えれば当たり前なのだが、初め「これは要素をどのように配列に追加するのか?」「変更された配列は戻り値で渡されるのか?」というところで混乱してしまった。