array_udiff的回调函数的原理是什么,如何比较的,谢谢。

解决方案 »

  1.   

    $a = array(1,2,3,4);
    $b = array('a','b','c','d');
    array_udiff($a, $b, function($a, $b) { echo "$a vs $b\n";});
    你看看结果,并比划比划
      

  2.   

    结果是:
    2 vs 1
    4 vs 2
    3 vs 2
    4 vs 3
    b vs a
    d vs b
    c vs b
    d vs c
    4 vs d
    4 vs 3
    3 vs 2
    2 vs 1还是看不懂,$a 中这么会有字母呢,应该全是数字呀,$b中应该全是字母,怎么又数字呢?
      

  3.   

    array_udiff() 函数用于比较两个(或更多个)数组的键值 ,并返回差集。
    myfunction的作用是定义比较方法,下面例子是比较值内容的
    <?php
    function myfunction($a,$b)
    {
    if ($a===$b)
      {
      return 0;
      }
      return ($a>$b)?1:-1;
    }$a1=array("a"=>"red","b"=>"green","c"=>"blue");
    $a2=array("a"=>"blue","b"=>"black","e"=>"blue");$result=array_udiff($a1,$a2,"myfunction");
    print_r($result);
    ?>
    $a1的a值是red,不存在$a2
    $a2的b值是green,不存在$a2
    所以返回
    Array ( [a] => red [b] => green )
      

  4.   

    那array_udiff和array_diff岂不是没啥区别了,我是想了解array_udiff的回调函数的运行机制,不是很了解,我上面也打印出回调函数里面的打印的值,不懂为什么会打印这些值,是什么样的运行机制。谢谢。
      

  5.   

    你没有认真去看传递给 array_udiff 回调函数的两个参数的关系吧?
    他是让你将两个数组的成员一一做个比较
    如果你按正常的方式进行比较的话,那么array_udiff 和 array_diff 就没有区别
    如果你按你的特殊规则进行比较的话,那就会产生你期望的另外的结果
    比如常规是 1 < 2,但你可以规定 1 = 2
    比如$a = [1,2,3,4];
    $b = [2,3];
    print_r(array_diff($a, $b));
    /*
    Array
    (
        [0] => 1
        [3] => 4
    )
    */print_r(array_udiff($a, $b, function($a, $b) { return $a<2?0:$a-$b;}));
    /*
    Array
    (
        [3] => 4
    )
    */