array_udiff()中的PHP错误?

时间:2015-10-20 22:34:00

标签: php function

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 在哪里?

1 个答案:

答案 0 :(得分:3)

这不是错误,因为您没有使用文档中描述的功能。

比较回调必须比较$a$b并确定它们是否等于,以计算差异。文档还声明您必须返回-11来暗示$a是否在$b之前;这可能听起来没用,但可能在内部使用。

你的回调转换为:"每个元素都在每个其他元素之后,除非第一个元素等于' n_3'在这种情况下,每个其他元素等于#34;。嗯,它没有意义,就像你得到的结果一样。

如果要将所有元素等同于' n_3',只需使用array_filter即可。如果要比较数组差异,请定义比较回调。