我想了解array_udiff()函数。 但令人困惑的是,函数array_diff()和array_udiff()产生的结果相同,那么我们为什么要使用array_udiff()?
代码:
echo "<h1>array_udiff()</h1>";
$a = array('a'=>'apple', 'c'=>'cat', 'b'=>'book');
$b = array('d'=>'dog');
echo "<pre>";
print_r(array_udiff($a,$b,function($a,$b){
if ($a < $b) {
return -1;
} elseif ($a > $b) {
return 1;
} else {
return 0;
};
}));
echo "<h1>array_diff()</h1>";
print_r(array_diff($a, $b));
输出:
array_udiff()
Array
(
[a] => apple
[b] => cat
[c] => book
)
array_diff()
Array
(
[a] => apple
[b] => cat
[c] => book
)
正如您在上面的示例中看到的那样,两个函数的输出都相同,那么我们为什么要使用array_udiff()
?
答案 0 :(得分:4)
当数组中的值不能与array_udiff()
,<
和>
运算符进行比较时,您需要使用==
。由于PHP不支持运算符重载,因此需要告知具有对象的数组如何进行比较。例如,尝试在带有array_diff()
个对象的数组上使用Car
,但是您希望按发行年份对它们进行比较:
$result = array_udiff($a, $b, function($a, $b){
return $b->getYear() - $a->getYear();
});
使用array_diff()
不起作用,因为PHP不知道如何比较对象。这适用于所有采用自定义函数进行比较的PHP数组函数。
答案 1 :(得分:1)
这正是array_udiff
的用途。编写一个按照您希望的方式比较两个对象的函数,然后告诉array_udiff
使用该函数。像这样:
function compare_objects($obj_a, $obj_b) {
return $obj_a->id - $obj_b->id;
}
$diff = array_udiff($first_array, $second_array, 'compare_objects');
或者,如果你使用PHP&gt; = 5.3,你可以使用匿名函数而不是声明一个函数:
$diff = array_udiff($first_array, $second_array,
function ($obj_a, $obj_b) {
return $obj_a->id - $obj_b->id;
}
);