【问题标题】:Sorting php multidimensional array by 2 values in prioritised order [duplicate]按优先顺序按2个值对php多维数组进行排序[重复]
【发布时间】:2013-11-25 00:21:15
【问题描述】:

所以我对 php 中的排序功能感到非常困惑,想知道是否有人能指出我正确的方向。

以下是一个多维数组,我希望先对我的日期进行排序,然后再按时间排序。这样,如果 2 个日期相同,则较早的时间将首先显示。

这可以做到吗?怎么做?

顶部的数组称为 $events

谢谢!

array(4) {
  [0]=>
  array(3) {
    ["name"]=>
    string(4) "Jack"
    ["date"]=>
    string(8) "21.11.13"
    ["time"]=>
    string(5) "17:36"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(4) "Mike"
    ["date"]=>
    string(8) "21.11.13"
    ["time"]=>
    string(5) "07:30"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(6) "Thomas"
    ["date"]=>
    string(8) "10.11.12"
    ["time"]=>
    string(5) "18:21"
  }
}

【问题讨论】:

标签: php sorting multidimensional-array


【解决方案1】:

为此,您需要array_multisort()。在您的情况下,您需要从多维数组中提取要排序的列,并将它们作为参数传递给 array_multisort。这是您问题的解决方案:)

/*walk the array and extract the columns needed for sorting*/
foreach($yourarray as $key=>$row){   
  $date[$key] = $row['date'];  
  $time[$key] = $row['time']; 
} 
/*sort the array */
array_multisort($date, SORT_ASC, $time, SORT_ASC, $yourarray);

【讨论】:

  • 由于某种原因不起作用,但另一篇文章中的这个是:# get a list of sort columns and their data to pass to array_multisort $sort = array(); foreach($event_array as $k=>$v) { $sort['date'][$k] = $v['date']; $sort['time'][$k] = $v['time']; } # sort by event_type desc and then title asc array_multisort($sort['date'], SORT_ASC, $sort['time'], SORT_ASC,$event_array); ?>
  • 好吧,我意识到阅读是可怕的——不知道如何正确格式化 cmets。我按照亚历山大库兹明给我的链接让它工作了,它和你的有点不同。我真的不明白发生了什么,所以我不知道为什么。看起来他提取到一个他称之为排序的新数组中,并用它来对初始数组进行排序?
猜你喜欢
  • 2011-05-29
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 2012-06-15
相关资源
最近更新 更多