如何通过PHP中的键对数组进行排序?

How can I sort an array by a key in PHP?

本问题已经有最佳答案,请猛点这里访问。

我有一个带一串钥匙的阵列。我想按它们的值对其中一个键进行排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array (
   [0] => stdClass Object (
                            [id] => 1
                            [question] => Action
                            [specific_to_movie_id] => 1
                            [total_yes] => 4 )
   [1] => stdClass Object (
                            [id] => 2
                            [question] => Created by DC Comics
                            [specific_to_movie_id] => 1
                            [total_yes] => 1 )
   [2] => stdClass Object (
                            [id] => 3
                            [question] => Christian Bale
                            [specific_to_movie_id] => 1
                            [total_yes] => 1 )
   )

数组如上图所示,我想按"total"排序。

如何在PHP中执行此操作?


因为它比标准数组排序稍微复杂一点,所以需要使用usort

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function compare_items( $a, $b ) {
    return $a->total_yes < $b->total_yes;
}


$arrayToSort = array (
    (object) array(
        'id' => 1,
        'question' => 'Action',
        'specific_to_movie_id' => 1,
        'total_yes' => 4
    ),
    (object) array(
        'id' => 2,
        'question' => 'Created by DC Comics',
        'specific_to_movie_id' => 1,
        'total_yes' => 1
    ),
    (object) array(
        'id' => 3,
        'question' => 'Christian Bale',
        'specific_to_movie_id' => 1,
        'total_yes' => 1
    )
);


usort($arrayToSort,"compare_items");

如果要颠倒排序顺序,只需将return $a->total_yes < $b->total_yes更改为使用>(大于)而不是<(小于)


您可以使用usort,例如:

1
2
3
4
5
function cmp($a, $b) {
  return $a < $b;
}

usort($your_array,"cmp");


可以使用使用特定compere函数的usort():

定义和用法

0

句法

usort(array,myfunction);

数组-必需。指定要排序的数组

MyFunction可选。定义可调用比较函数的字符串。如果第一个参数小于、等于或大于第二个参数,则comparison函数必须返回一个小于、等于或大于0的整数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

    function cmp($a, $b)
    {
        if ($a->total_yes == $b->total_yes) {
            return 0;
        }
        return ($a->total_yes < $b->total_yes) ? -1 : 1;
    }



    usort($array,"cmp");

    ?>

您有对象,因此需要使用[usort()][http://www.php.net/manual/en/function.usort.php]

2