[PHP] array_diffでハマる
2008年3月6日
PHPのarray_diffの挙動で微ハマりした
<?php $a = array(1,2,3,4); $b = array(0,1,2,3); var_dump(array_diff($a, $b)); var_dump(array_diff($b, $a));
上記を実行すると(PHP4・PHP5共通)
array(1) { [3]=> int(4) } array(1) { [0]=> int(0) }
こういう出力になる、0と4が差分なはずなのに・・・?
というのも diffってよりは、$配列1 – $配列2 って感じの挙動だからです。
なので、$配列2の方が大きい場合は、array() が返って差が無いということになる。
(えー、初めて知ったよ)
対処法はいくらでもあるが、パターンの1つとしては
if (count(array_diff($a, $b)) === 0 && count(array_diff($b, $a)) === 0) /* 処理 */;
こんな風に相互に判定して論理積を取るとか。