在下面http://php.net/manual/en/function.usort.php的示例中,调用了一个回调函数。
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$x = array(3, 2, 5, 6, 1);
usort($x, "cmp");
foreach ($x as $key => $value) {
echo "$key: $value<br>";
}
我对usort并不特别感兴趣,但它就在这个例子中。我的问题是,cmp函数的$ a和$ b参数是什么? usort给出$ x这是一个数组,所以我不明白cmp中发生了什么(代码很简单,但我不知道参数是什么)。
我的想象力告诉我,$ a和$ b都以某种方式迭代数组(唯一可以对其进行排序的方式)。有人可以对此有所了解吗?
答案 0 :(得分:2)
它们是阵列中的两个元素,相互比较。如果两个元素相等,则比较函数应返回0,如果$ a <0,则小于0。如果$ a&gt; $ b或大于0 $ B
php.net Example #2 usort() example using multi-dimensional array上的第二个例子说明了这一点。
由于每个数组索引都是一个数组本身,可能包含许多元素,因此它允许您根据所需的索引对数组进行排序。
在这些情况下,您只需要知道回调期望接收2个要比较的值,因为要对数组进行排序,您一次比较2个元素,直到列表被排序。有关排序算法的详情,请参阅Quicksort或Bubble sort。
<?php
function cmp($a, $b)
{
// usort gives 2 values from the array to compare, $a and $b
// we compare the "fruit" index from each item so the array is
// ultimately sorted by fruit
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list($key, $value) = each($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}