编程语言
首页 > 编程语言> > 在php中,usort()函数如何工作

在php中,usort()函数如何工作

作者:互联网

我已经看过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)

);

我希望能够将从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)没有意义.我试图打印出所有的过程,你可以看到,但没有找到任何解决方案,它是如何工作的..

谢谢

解决方法:

函数cmp本身不进行排序.它只是告诉我们一个值是否小于,等于或大于另一个值.例如.如果$a = 5且$b = 9,则返回1表示$b中的值大于$a中的值.

排序由usort完成.

标签:usort,php,sorting,multidimensional-array
来源: https://codeday.me/bug/20190926/1821701.html