PHP:我们为什么要使用array_udiff()?

时间:2015-08-04 12:24:16

标签: php arrays

我想了解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()

2 个答案:

答案 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;
  }
);