[php]「PHPで配列の(プラス)演算子」の解説
PHPで配列の(プラス)演算子:phpspot開発日誌
http://phpspot.org/blog/archives/2007/10/post_162.html
何かと話題になったphpspotさんですが、今日の記事は配列でもプラス演算子でマージができると言う話でした。参照元のITProの記事にも書いてありますが、array_merge()関数による配列のマージと、+演算子による配列のマージは結果が異なることがあります。これを知らないと不可解なバグに悩まされるので注意が必要です。また、array_merge_recursive()関数でのマージ結果も違います。ここらへんはプログラマ泣かせな感じですが、しっかりと違いを把握しておきたいですね。
ということで、検証用にページを作りました。
各種配列マージの結果の違いと考察 – うえちょこ@ぼろぐ 分室
http://labs.uechoco.com/blog/_phpcode/array_merge.php
長ったらしい検証記事は読みたくないと言う方もいるかと思うので、ざっとまとめ。
- +演算子
- 同じ数字キー・文字列キーが存在した場合、上書きしない
- 被加算配列に存在しない数字キー・文字列キーがあった場合は、キーの名前を維持したまま追加する
- array_merge()関数
- 同じ文字列キーが存在した場合、上書きする
- 同じ数字キーが存在した場合、配列の末尾に追加する。この際、配列内のすべての数字キーは添字(キー名)が振りなおされる
- array_merge_recursive()関数
- 同じ文字列キーが存在した場合、配列としてグループ化する。
- 同じ数字キーが存在した場合、配列の末尾に追加する。この際、配列内のすべての数字キーは添字(キー名)が振りなおされる
- 2次元配列であった場合、その中の階層まで処理を行う(再帰処理)。
- 結果の配列の中には、被加算配列と加算配列の両方で使われた値がすべて入っている。つまり値は上書きされないが、すべて結果の配列に取り込まれる。
普通にプログラムを書いているときであれば、+演算子とarray_merge()を使い分けられれば問題ないと思います。この機会にぜひ復習してみてください。
One Response to “[php]「PHPで配列の(プラス)演算子」の解説”
Comments RSS
TrackBack Identifier URI
コメントする

PHPの配列結合演算子+(プラス)について考えてみた
配列結合演算子は「連想配列の継承」なのだという悟りが啓けたのでまとめてみました。