旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[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) /* 処理 */;

こんな風に相互に判定して論理積を取るとか。