function value_compare_func($a, $b){
if ($a === 'n_3') {
return 0;
}
return 1;
}
$array1 = array("n_1", "n_2", "n_3", "n_4" );
$array2 = array("green");
$result = array_udiff($array1, $array2, "value_compare_func");
print_r($result);
预期输出为:
Array([0] => 'n_1', [1] => 'n_2' , [3] => 'n_4' )
但PHP输出:
Array([1] => 'n_2' , [3] => 'n_4' )
n_1
在哪里?
答案 0 :(得分:3)
这不是错误,因为您没有使用文档中描述的功能。
比较回调必须比较$a
和$b
并确定它们是否等于,以计算差异。文档还声明您必须返回-1
和1
来暗示$a
是否在$b
之前;这可能听起来没用,但可能在内部使用。
你的回调转换为:"每个元素都在每个其他元素之后,除非第一个元素等于' n_3'在这种情况下,每个其他元素等于#34;。嗯,它没有意义,就像你得到的结果一样。
如果要将所有元素等同于' n_3',只需使用array_filter
即可。如果要比较数组差异,请定义比较回调。