在看php函数手册时,对array_diff_uassoc这个函数的使用有一些疑惑,按手册上的例子:
<?php
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
?>
这个key_compare_func是如何运作?返回的值又有什么意义?没有给出明确的解说,决定自己试一下:
首先加上输出函数:
function key_compare_func($a, $b)
{
print_r("a:$a.b:$b<br/>");
if ($a == $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
再随便改一下数组:
$array1 = array("a" => "green","X"=>"WW");
$array2 = array("a" => "green","W"=>"WW");
发现输出竟是这样的:
a:X.b:a
a:W.b:a
a:X.b:W
a:X.b:a
a:a.b:a
Array ( [X] => WW )
原来这个函数的执行次序是将两个数组中的每个元素依次对比,但不明白的是为什么还要将$array1中的两个元素比对一下?
在值相等且a和b相等时,即返回0时,不输出;
当a!=b时,即返回1或-1时,才输出.
另外有个奇怪的地方,当把数组改成:
$array1 = array("1" => "green","2"=>"WW");
$array2 = array("0" => "green","W"=>"WW");
输出显示少执行了一次比较:
a:2.b:1
a:W.b:0
a:1.b:W
a:1.b:0
Array ( [1] => green [2] => WW )
array_diff_uassoc的分析
最新推荐文章于 2024-07-28 14:55:40 发布