我看过php文档,在线教程,但没有一篇是usort的实际工作原理。下面我有一个我正在玩的例子。
$data = array(
array('msg' => 'some text','month' => 11,'level' => 10),
array('msg' => 'some text','month' => 5,'level' => 10),
array('msg' => 'some text','month' => 8,'level' => 10),
array('msg' => 'some text','month' => 12,'level' => 10),
array('msg' => 'some text','month' => 2,'level' => 10),
array('msg' => 'some text','month' => 3,'level' => 10),
array('msg' => 'some text','month' => 4,'level' => 10),
array('msg' => 'some text','month' => 7,'level' => 10),
array('msg' => 'some text','month' => 10,'level' => 10),
array('msg' => 'some text','month' => 1,'level' => 10),
array('msg' => 'some text','month' => 6,'level' => 10),
array('msg' => 'some text','month' => 9,'level' => 10)
);
我希望能够通过一些帮助从12个月到1个月进行排序(因为他们没有组织)这就是解决方案
function cmp($a, $b)
{
if ($a["month"] == $b["month"])
{
return 0;
}
return ($a["month"] < $b["month"]) ? -1 : 1;
}
usort($data, "cmp");
但是我不明白cmp函数是如何对数组进行排序的。我尝试打印每个变量$a和$b,如下所示:
function cmp($a, $b)
{
echo "a: ".$a['month']."<br/>";
echo " b: ".$b['month']."<br/>";
echo "<br/><br/>";
}
输出结果是
a: 3
b: 5
a: 9
b: 3
a: 3
b: 8
a: 6
b: 3
a: 3
b: 12
a: 1
b: 3
a: 3
b: 2
a: 10
b: 3
a: 3
b: 11
a: 7
b: 3
a: 4
b: 3
a: 12
b: 2
a: 5
b: 12
a: 12
b: 11
a: 8
b: 12
a: 5
b: 8
a: 2
b: 11
a: 6
b: 9
a: 7
b: 6
a: 6
b: 4
a: 10
b: 6
a: 1
b: 6
a: 9
b: 4
a: 7
b: 1
a: 10
b: 7
它对排序是如何工作的以及为什么使用cmp($a,$b)没有任何意义。正如你所看到的,我已经尝试打印出它的所有过程,但还没有找到任何关于它是如何工作的解决方案。
谢谢
发布于 2011-12-10 19:04:20
函数cmp
本身并不进行排序。它只是告诉usort
一个值是小于、等于还是大于另一个值。例如,如果为$a = 5
和$b = 9
,则返回1,表示$b
中的值大于$a
中的值。
排序由usort
完成。
发布于 2011-12-10 19:06:00
PHP中提供给排序函数的回调有三个返回值:
0: both elements are the same
-1 (<0): the first element is smaller than the second
1 (>0): the first element is greater
现在,usort
可能在内部使用了某种快速排序或合并排序。对于每次比较,它都会使用两个元素调用您的回调,然后决定是否需要交换它们。
https://stackoverflow.com/questions/8456029
复制相似问题