-1

我有一个带有一堆键的数组。我想按它们的值对其中一个键进行排序。

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_yes”排序

我该如何在 PHP 中执行此操作?

4

4 回答 4

3

Because it's a little more complex than a standard array sort, you'll need to use usort:

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");

If you want to reverse the sort order, just change return $a->total_yes < $b->total_yes to use > (greater than) instead of < (less than)

于 2013-02-24T10:27:46.713 回答
2

您可以使用usort,例如:

function cmp($a, $b) {
  return $a < $b;
}

usort($your_array, "cmp");
于 2013-02-24T10:26:12.710 回答
0

You have object, therefore you need use [usort()][http://www.php.net/manual/en/function.usort.php]

usort($array, function($a, $b){
    if ($a->total_yes == $b->total_yes)
        return 0;
    return ($a->total_yes > $b->total_yes) ? -1 : 1;});
print_r($array);
于 2013-02-24T10:30:24.940 回答
0

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

定义和使用

usort() 函数使用用户定义的比较函数对数组进行排序。

句法

usort(数组,我的函数);

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

myfunction-可选。定义可调用比较函数的字符串。如果第一个参数是 <、= 或 >,则比较函数必须返回一个整数 <、= 或 >,而不是第二个参数

<?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");

    ?>
于 2013-02-24T10:32:44.593 回答