php array_udiff工作原理

WBOY
發布: 2016-06-06 20:40:29
原創
1554 人瀏覽過

php的array_udiff的工作原理实在搞不懂,尤其是回调函数,

<code>    $arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
    $arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6);

    var_dump(array_udiff($arr1, $arr2, function($a, $b){
        print_r($a.'~~~~'.$b.'<br>');
        if($a>$b) 
            return 1;
        else
            return 0;
    })
);
</code>
登入後複製
登入後複製

每次的回调函数的参数是什么, 我把它打印出来,可并不像期望的那样,$arr1的每个元素值直接与$arr2的每个元素值相比较,而是

<code>5~~~~1
3~~~~5
1~~~~3
6~~~~5
1~~~~5
1~~~~3
3~~~~5
</code>
登入後複製
登入後複製

回调函数返回的结果又是做什么用的,求解

最后吐槽一下,网上查的结果全他么都是从www3school和php.net复制下来的,实在不能忍,操

回复内容:

php的array_udiff的工作原理实在搞不懂,尤其是回调函数,

<code>    $arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
    $arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6);

    var_dump(array_udiff($arr1, $arr2, function($a, $b){
        print_r($a.'~~~~'.$b.'<br>');
        if($a>$b) 
            return 1;
        else
            return 0;
    })
);
</code>
登入後複製
登入後複製

每次的回调函数的参数是什么, 我把它打印出来,可并不像期望的那样,$arr1的每个元素值直接与$arr2的每个元素值相比较,而是

<code>5~~~~1
3~~~~5
1~~~~3
6~~~~5
1~~~~5
1~~~~3
3~~~~5
</code>
登入後複製
登入後複製

回调函数返回的结果又是做什么用的,求解

最后吐槽一下,网上查的结果全他么都是从www3school和php.net复制下来的,实在不能忍,操

先不要管它内部是怎么实现比较算法的,我们在callback里 需要实现的是 回调函数的第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。
楼主的例子更改为如下时,便可实现正常的比较功能:

<code class="lang-php">$arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
$arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6);

var_dump(array_udiff($arr1, $arr2, function($a, $b){
print_r($a.'~~~~'.$b.'<br>');
 if($a>$b){
    return 1;
 } else if($a == $b) {
    return  0;
 } else if($a </code>
登入後複製

回调函数只要实现如何判断传进来的两个值是相等还是大于小于的关系即可。这两个值都是数组的元素。但是不要误会 第一个参数是第一个数组的值,第二个参数是第二个数组的值。

call_back在这个函数中有2个作用,
* 排序 将array_udiff中的每个参数排序,并返回hash之后的数组
* 过滤 将第一个数组与其他数组比较,过滤出要返回的值
P.S. 我确定这个过程是正确的。参考PHP: array_udiff()

在你的例子中

<code>$arr1 = array('m1'=>1, 'm2'=>5, 'm3'=>3);
$arr2 = array('n2'=>4, 'n2'=>5, 'n3'=>6); //n2=>4应该是n1吧?

输出中的前4项
5~~~~1
3~~~~5
1~~~~3
6~~~~5
就是在做排序

拍完序之后,会把第一数组中的每一个项去其他数组中检查,若不存在则将该项放入返回数组中。

但是从输出的内容上看有点诡异,我也不明白!囧。
</code>
登入後複製

array_diff本身是计算数组的差集。貌似不支持回调函数吧?
http://cn2.php.net/manual/zh/function.array-diff.php

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!