ここはちょっと見せられない

ぜったいぜったい見せられない

array_diff

http://jp2.php.net/manual/ja/function.array-diff.php

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

みなされます、の間違いか。

なんか結果を見ると、nullと空文字列が変だなあと思って確認するべく書いてみた。

<?php

$arr1 = array( 'a'=>null, 'b'=>'', 'c'=>0 );
echo "\$arr1 = array( 'a'=>null, 'b'=>'', 'c'=>0 )"; 
echo '<br>dump:';
var_dump($arr1);
echo '<hr>';

$arr2 = array( null );
echo "\$arr2 = array( null )"; 
echo '<br>dump:';
var_dump($arr2);
echo '<hr>';

$arr3 = array( '' );
echo "\$arr3 = array( '' )"; 
echo '<br>dump:';
var_dump($arr3);
echo '<hr>';


echo 'array_diff( $arr1, $arr2)';
echo '<br>dump:';
var_dump( array_diff( $arr1, $arr2));

echo '<br>';
echo '<br>';
echo 'array_diff( $arr1, $arr3)';
echo '<br>dump:';
var_dump( array_diff( $arr1, $arr3));

出力:

$arr1 = array( 'a'=>null, 'b'=>'', 'c'=>0 )
dump:array(3) { ["a"]=> NULL ["b"]=> string(0) "" ["c"]=> int(0) }

$arr2 = array( null )
dump:array(1) { [0]=> NULL }

$arr3 = array( '' )
dump:array(1) { [0]=> string(0) "" }

array_diff( $arr1, $arr2)
dump:array(1) { ["c"]=> int(0) }

array_diff( $arr1, $arr3)
dump:array(1) { ["c"]=> int(0) } 


で、よくよく見ると

(string) $elem1 === (string) $elem2 の場合のみ等しい

とあり、stringにキャストされていることを知った。
気もちわるうい。