很抱歉发布这个完全混淆的n00b问题,但我没有绕过manual中的奥术usort()
解释。
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
当我在echo $a
函数中cmp
时,我得到5156120
作为第一项的关键字,当我echo $b
时,我得到2535630
。
这基本上是我的整个问题:回调函数中的$a
和$b
是什么?
但是如果你想真正提供帮助,请对所发生的事情给出一个“逐行”的解释。
HAPPY NYE !!!
(我尝试添加标签“noob”和“confused”,虽然需要1400点声望。;)
答案 0 :(得分:4)
$a
和$b
是自定义比较函数中要比较的两个值。
如果您要排序array( 3, 2, 5, 6, 1)
,您会发现cmp()
会比较3到2,2到5,5到6等,直到值正确排序。
所以,例如:
<?php
function cmp($a, $b)
{
echo "$a :compared with: $b <br/>";
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$arr = array(3, 2, 5, 6, 1);
usort($arr, "cmp");
输出:
5 :compared with: 2
5 :compared with: 3
5 :compared with: 6
1 :compared with: 5
2 :compared with: 1
3 :compared with: 2
我看到usort()
通常用于进行更复杂的比较,你需要拆分价值并只比较一部分,或者分配自定义优先级(例如按总统,副总裁,秘书排序)等等,优先而不是字母数字值)