Sar*_* B. 22 php sorting usort multidimensional-array
我已经看过php文档,在线教程,但没有一个是如何实际工作的.我有一个例子,我在下面玩.
$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)
);
Run Code Online (Sandbox Code Playgroud)
我希望能够通过一些帮助将12个月到1个月(因为它们没有组织)排序,这就是解决方案
function cmp($a, $b)
{
if ($a["month"] == $b["month"])
{
return 0;
}
return ($a["month"] < $b["month"]) ? -1 : 1;
}
usort($data, "cmp");
Run Code Online (Sandbox Code Playgroud)
但我不明白函数cmp如何对数组进行排序.我尝试打印出每个变量$ a和$ b,如下所示:
function cmp($a, $b)
{
echo "a: ".$a['month']."<br/>";
echo " b: ".$b['month']."<br/>";
echo "<br/><br/>";
}
Run Code Online (Sandbox Code Playgroud)
而输出是
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
Run Code Online (Sandbox Code Playgroud)
对于排序是如何工作以及为什么使用cmp($ a,$ b)没有意义.我试图打印出所有的过程,你可以看到,但没有找到任何解决方案,它是如何工作的..
谢谢
hal*_*dan 27
函数cmp本身不进行排序.它只是告诉usort一个值是小于,等于还是大于另一个值.例如if $a = 5和$b = 9它将返回1以指示值in $b大于in中的值$a.
排序是通过usort.
kni*_*ttl 23
提供给PHP中的排序函数的回调有三个返回值:
0: both elements are the same
-1 (<0): the first element is smaller than the second
1 (>0): the first element is greater
Run Code Online (Sandbox Code Playgroud)
现在,usort可能在内部使用某种quicksort或mergesort.对于每个比较,它使用两个元素调用您的回调,然后决定是否需要交换它们.
| 归档时间: |
|
| 查看次数: |
29470 次 |
| 最近记录: |