【问题标题】:How to sort multidimensional array in php order by array value. Array may contain duplicated values [duplicate]如何按数组值按 php 顺序对多维数组进行排序。数组可能包含重复值 [重复]
【发布时间】:2014-01-03 11:44:34
【问题描述】:

我有数组 $leaderboard。其中包含以下数据

Array
(
    [0] => Array
        (
            [name] => ABC
            [time_taken] => 01:46:56
        )

    [1] => Array
        (
            [name] => DEF
            [time_taken] => 00:21:54
        )

    [2] => Array
        (
            [name] => MNO
            [time_taken] => 00:34:14
        )

    [3] => Array
        (
            [name] => PQR
            [time_taken] => 00:09:17
        )

    [4] => Array
        (
            [name] => XYZ
            [time_taken] => 00:34:14
        )

    [5] => Array
        (
            [name] => STR
            [time_taken] => 00:34:14
        )

    [6] => Array
        (
            [name] => LOK
            [time_taken] => 17:53:58
        )
}

我尝试根据时间对数组进行排序。如果时间值不使用 ksort 重复,它工作正常。但是对于重复的时间,它只会显示在记录中

【问题讨论】:

标签: php sorting multidimensional-array


【解决方案1】:
<h4>function aasort (&$array, $key) {
<br>
    $sorter=array();<br>
    $ret=array();<br>
    reset($array);<br>
    foreach ($array as $ii => $va) {<br>
        $sorter[$ii]=$va[$key];<br>
  <br>  }
    asort($sorter);<br>
    foreach ($sorter as $ii => $va) <br>{

        $ret[$ii]=$array[$ii];
    }
    $array=$ret;<br>
}

aasort($your_array,"order");</h4>

【讨论】:

    【解决方案2】:

    试试这个代码,

    <?php
    
    $sortArray = array(array('name' => 'ABC',
                            'time_taken' => '01:46:56'),
                        array('name' => 'DEF',
                            'time_taken' => '00:21:54'),
                        array('name' => 'MNO',
                            'time_taken' => '00:34:14'),
                        array('name' => 'PQR',
                            'time_taken' => '00:09:17'),
                        array('name' => 'XYZ',
                            'time_taken' => '00:34:14'),
                        array('name' => 'LOK',
                            'time_taken' => '17:53:58'));
    print_r($sortArray);
    foreach ($sortArray as $key => $row) {
        $sorting[$key] = $row['time_taken'];
    }
    array_multisort($sorting, SORT_ASC, $sortArray);
    print_r($sortArray);
    

    【讨论】:

    • 感谢@Ajith S。它现在可以工作了。
    【解决方案3】:

    您可以定义自己的排序函数并使用 uksort。 更多信息:uksort

    【讨论】:

      【解决方案4】:

      请试一试..

      function cmp( $a, $b ) { 
        if(  strtotime($a['time_taken']) ==  strtotime($b['time_taken']) ){ return 0 ; } 
        return (strtotime($a['time_taken']) < strtotime($b['time_taken'])) ? -1 : 1;
      } 
      
      usort($leaderboard,'cmp');
      

      参考https://stackoverflow.com/a/9001655/829533

      【讨论】:

      • 更短的方法是返回strtotime($a['time_taken']) - strtotime($b['time_taken'])
      • @Nitin_aeon 对你有用吗?
      • 前 2 条记录显示错误。否则它的工作。
      猜你喜欢
      • 1970-01-01
      • 2011-05-29
      • 2013-11-25
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 2013-07-26
      • 2012-05-16
      相关资源
      最近更新 更多