array_mergeとarray_pushの違い

phpで配列に要素を追加するための2つのメソッドの違いについてのメモ。

今日仕事で使っていてハマったのでメモ。

やりたかったことはこういう事。

[1, 2, 3] + [4, 5, 6] => [1, 2, 3, 4, 5, 6]

そこで調べてみたところ、array_mergearray_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引数の配列が直接書き換えられている。

冷静に処理内容を考えれば当たり前なのだが、初め「これは要素をどのように配列に追加するのか?」「変更された配列は戻り値で渡されるのか?」というところで混乱してしまった。