suin.io

[PHP] array_diff()は文字列比較だから注意してね

suin2011年8月19日
$array1 = array(
    array('わんこ'),
    array('にゃんこ'),
);
$array2 =  array(
    array('わんこ'),
    array('ねこ'),
);
var_dump(array_diff($array2, $array1));
/*
array(0) {
}
*/
var_dump((string) $array1[0], (string) $array1[1], (string) $array2[0], (string) $array2[1]);
/*
string(5) "Array"
string(5) "Array"
string(5) "Array"
string(5) "Array"
*/

PHP: array_diff - Manualをよく読むと、こんな注意書きが。

注意:

二つの要素は、(string) $elem1 === (string) $elem2 の場合のみ等しいと見直されます。言い換えると、文字列表現が同じ場合となります。

要素が配列だと、string(5) “Array”同士の比較になっちゃうのね(´・ω・`)

RELATED POSTS