代码
<?php
function myfunction($a,$b)
{
return 0;
// return 1;
// return -1;
// if ($a===$b)
// {
// return 0;
// }
// return ($a>$b)?1:-1;
}
$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("a"=>"red","b"=>"green","d"=>"blue");
$a3=array("e"=>"yellow","a"=>"red","d"=>"blue");
$result=array_diff_uassoc($a1,$a2,$a3,"myfunction");
print_r($result);
?>
问题:
return 0; 结果:Array
(
[b] => green
[c] => blue
)
return 非0;结果:Array
(
[a] => red
[b] => green
[c] => blue
)
根据array_diff_ukey我分析是 自定义函数 返回 0 则输出该值 返回1 则不输出
<?php
function myfunction($a,$b)
{
// return 1; // Array([a] => red;[b] => green;[c] => blue)
return 0; // Array()
// 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_diff_ukey($a1,$a2,"myfunction");
print_r($result);
?>
但是这是什么情况???
求指点
这个问题很好,其实这里涉及到php查找算法。两个函数都是使用自定义函数比较数组的键名,取差集。如果给两个不重复元素的两个数组,查找在第一个数组出现且不在第二个数组出现的元素。php的比较过程是分别取两个数组的第一个元素,如果相同,则第一个数组下标往前移动,如果不同,则保存第一个数组元素,第二个数组下标往前移动。
基于这样的处理方式
实际上比较的过程是
[a-a,b-a,c-a]
,因为键名比较自定义函数中返回0,认为都是一样的,比较过程导致比较键值是所以输出结果是
array("b"=>"green","c"=>"blue");
array_diff_ukey
则只是比较键名,不管键值。因为自定义函数总数返回0,所以返回结果为空