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

$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.'

');

if($a>$b)

return 1;

else

return 0;

})

);

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

5~~~~1

3~~~~5

1~~~~3

6~~~~5

1~~~~5

1~~~~3

3~~~~5

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

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

回复内容:

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

$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.'

');

if($a>$b)

return 1;

else

return 0;

})

);

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

5~~~~1

3~~~~5

1~~~~3

6~~~~5

1~~~~5

1~~~~3

3~~~~5

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

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

先不要管它内部是怎么实现比较算法的,我们在callback里 需要实现的是 回调函数的第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

楼主的例子更改为如下时,便可实现正常的比较功能:

$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.'

');

if($a>$b){

return 1;

} else if($a == $b) {

return 0;

} else if($a < $b) {

return -1;

}

}));

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

call_back在这个函数中有2个作用,

* 排序 将array_udiff中的每个参数排序,并返回hash之后的数组

* 过滤 将第一个数组与其他数组比较,过滤出要返回的值

P.S. 我确定这个过程是正确的。参考PHP: array_udiff()

在你的例子中

$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

就是在做排序

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

但是从输出的内容上看有点诡异,我也不明白!囧。

array_diff本身是计算数组的差集。貌似不支持回调函数吧?

http://cn2.php.net/manual/zh/function.array-diff.php

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php arrayudiff,php array_udiff工作原理相关推荐

  1. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  2. 深入理解Nginx工作原理

    1 反向代理 1.1 概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给intern ...

  3. 高频开关电源原理_程控开关电源的工作原理

    本文介绍了开关电源的工作原理以及它的特点. 程控开关电源要要比线性电源复杂得多. 下图是典型的开关电源工作原理图. 首先对 220 V/50Hz 的 AC 输入,通过桥式整流器进行整流 储能电容对整流 ...

  4. Servlet生命周期与工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  5. java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?

    近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件:SqlSession Executor Stat ...

  6. linux网络管理原理,Linux__网络管理(物理层 数据链路层 网络层工作原理)

    千锋云计算逆战班11点后打卡 今天学习后,进行复习下,物理层 数据链路层  网络层 的工作原理 物理层关心的两件事情:1.信号 2.介质 先说信号:信号分为模拟信号和数字信号 模拟信号: 模拟信号,不 ...

  7. HDD工作原理 导图

    以上导图介绍了我们使用的 (HDD)机械硬盘的基本构造以及核心工作原理,对于大家扫盲有所帮助 参考文档: https://blog.csdn.net/yizhaoxin/article/details ...

  8. 路由和交换机工作原理

    路由器与交换机的工作原理 计算机网络往往由许多种不同类型的网络互连连接而成.如果几个计算机网络只是在物理上连接在一起,它们之间并不能进行通信,那么这种"互连"并没有什么实际意义.因 ...

  9. Google工作原理

    今天在晚上看到一个图,讲解google的工作原理,感觉写的不错.贴过来方便以后深入的研究. 转载于:https://www.cnblogs.com/muyuge/archive/2010/07/06/ ...

最新文章

  1. 如何高效快速搞散一个团队?
  2. 如何参与一个顶级开源项目
  3. C#中常用的经典文件操作方法
  4. Mac版 Android Studio Android Sdk 更新方式
  5. 自动升级失败,缺少System.resources.dll?
  6. Eclipse 搭建Android开发环境(整理)
  7. 女生转行IT与男生有什么不一样?
  8. python运动目标检测与跟踪_基于OpenCV的运动目标检测与跟踪
  9. 计算点到SVM超平面的距离
  10. 用递归法计算从n个人中选择k个人的组合数
  11. 计算机软件故障排除ppt,计算机基础知识及常见故障排除.ppt
  12. 获取小程序页面跳转链接
  13. MFC中资源视图中对话框大小和实际像素尺寸显示问题
  14. 计算机显卡型号中数字含义详解,显卡型号中字母和数字都是什么意思?
  15. Hadoop之HDFS的使用
  16. 删除文件名含有特殊字符的文件
  17. VUE:自定义指令(directives )选项的用法
  18. 树莓派可视化网页仪表盘(pi-dashboard)
  19. 计算机视觉(二)-matlab之理想低通滤波器,布特沃斯低通、高斯低通,理想高通、布特沃斯高通、高斯高通滤波器
  20. (C)problem1:C语言阶乘求和

热门文章

  1. 史上最复杂业务场景,逼出阿里高可用三大法宝
  2. java基础---多线程同步锁问题
  3. leetcode 148. Sort List | 148. 排序链表(最优解归并排序,O(1)空间)
  4. leetcode 520. 检测大写字母(Java版)
  5. PAT1057 数零壹 (20 分)
  6. wildfly 21的配置文件和资源管理
  7. orion算法被解密了
  8. 【最优解】Leecode 594. 最长和谐子序列——Leecode每日一题系列
  9. 简便解法:1004 成绩排名 (20分)
  10. 22行代码AC——L1-023 输出GPLT(~解题报告~)