2015-02-10 84 views
-1

我有一个数组,看起来是这样的:在PHP排序多维数组的日期

Array 
(
    [0] => Array 
     (
      [id] => 4 
      [date] => 15.12.2014 
      [archived] => 0 
     ) 

    [1] => Array 
     (
      [id] => 3 
      [date] => 19.12.2014 
      [archived] => 0 
     ) 

    [2] => Array 
     (
      [id] => 6 
      [date] => 15.11.2014 
      [archived] => 0 
     ) 
) 

我想要做的是排序的项目为高到低的顺序在第一维基础在第二维中的日期值。我可以在[日期]字段中使用strtotime()并生成一个unix时间戳(请注意,这些日期是澳大利亚格式,而不是美国。服务器产生正确的时间戳)。

我知道我可以使用arsort()来安排这个数组,但我不知道如何根据第二维数组键的值来做到这一点。

我需要的阵列看起来像这样:

Array 
(

    [0] => Array 
     (
      [id] => 3 
      [date] => 19.12.2014 
      [archived] => 0 
     ) 
    [1] => Array 
     (
      [id] => 4 
      [date] => 15.12.2014 
      [archived] => 0 
     ) 
    [2] => Array 
     (
      [id] => 6 
      [date] => 15.11.2014 
      [archived] => 0 
     ) 
) 

我怎样才能最好的PHP实现这一目标?

我已经尝试了以下无济于事的各种安排:

arsort($items, strtotime(['date'])) 
+0

http://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value – Deshan 2015-02-10 07:28:53

回答

1

您应该使用usort

你的情况:

usort($items, function($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
}); 
0

假设你的$数组声明那样:

$my_array = array(
       array(
       'id'=>4, 
       'date'=>'19.12.2014', 
       'archived'=>0), 
       array(
       'id'=>3, 
       'date'=>'15.12.2014', 
       'archived'=>0), 
       array(
       'id'=>6, 
       'date'=>'15.11.2014', 
       'archived'=>0)); 

可以使用usort功能具有关闭功能如下

usort($my_array, function($a, $b) { 
    return strtotime($a['date']) - strtotime($b['date']); 
}); 

usort将整理您的数组“到位”,是指没有数组的副本将被归还,但原来的数组进行排序。
此外,我使用strtotime在日期之间进行排序,因为开始日期表示为字符串,而不是“实际日期”格式。

而且记住,

注:此功能分配新的键在数组中的元素。它将删除任何可能已经分配的现有密钥,而不是仅对密钥重新排序的 。

执行测试

Array 
(
    [0] => Array 
     (
      [id] => 6 
      [date] => 15.11.2014 
      [archived] => 0 
     ) 

    [1] => Array 
     (
      [id] => 4 
      [date] => 15.12.2014 
      [archived] => 0 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [date] => 19.12.2014 
      [archived] => 0 
     ) 
)