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.'<br/>');
if($a>$b)
return 1;
else
return 0;
})
);
每次的回调函数的参数是什么, 我把它打印出来,可并不像期望的那样,$arr1的每个元素值直接与$arr2的每个元素值相比较,而是
用 php + mysql 驱动的在线商城系统,我们的目标为中国的中小企业及个人提供最简洁,最安全,最高效的在线商城解决方案,使用了自建的会员积分折扣功能,不同的会员组有不同的折扣,让您的商店吸引更多的后续客户。 系统自动加分处理功能,自动处理会员等级,免去人工处理的工作量,让您的商店运作起来更方便省事 采用了自建的直接模板技术,免去了模板解析时间,提高了代码利用效率 独立开发的购物车系统,使用最
0
5~~~~1 3~~~~5 1~~~~3 6~~~~5 1~~~~5 1~~~~3 3~~~~5
回调函数返回的结果又是做什么用的,求解
最后吐槽一下,网上查的结果全他么都是从www3school和php.net复制下来的,实在不能忍,操
php的array_udiff的工作原理实在搞不懂,尤其是回调函数,
立即学习“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
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.'<br/>');
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在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号