【问题标题】:How can I sort an array by a key in PHP? [duplicate]如何通过 PHP 中的键对数组进行排序? [复制]
【发布时间】:2013-02-24 18:42:37
【问题描述】:

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

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 中做到这一点?

【问题讨论】:

  • 更好地格式化您的输出,也许有人会提供帮助。
  • 还是有人帮忙了,谢谢

标签: php arrays sorting


【解决方案1】:

因为它比标准数组排序稍微复杂一些,所以您需要使用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");

如果要反转排序顺序,只需将return $a-&gt;total_yes &lt; $b-&gt;total_yes 更改为使用>(大于)而不是

【讨论】:

  • 感谢编辑@nicholas-pickering :)
  • 运气不太好,我实现了函数,然后调用了 usort :/
【解决方案2】:

你可以使用usort,比如:

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

usort($your_array, "cmp");

【讨论】:

    【解决方案3】:

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

    定义和用法

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

    语法

    usort(array,myfunction);

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

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

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

    【讨论】:

      【解决方案4】:

      你有对象,所以你需要使用 [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);
      

      【讨论】:

      • 这行得通,只是它的顺序与我需要的顺序相反。有什么建议么?谢谢!
      • @DanielFein 抱歉,我已编辑答案,现在可以了