简体   繁体   English

通过数组集的键对多维数组进行排序

[英]Sort multidimensional array by key of set of array

I'm looking for a solution to sort by key a multi dimensional array, the point is that I can sort a set of array with multidimensional that has no custom key ID and the array is in set, but this array contains custom key and I need to sort by date: 我正在寻找一种按键对多维数组进行排序的解决方案,关键是我可以使用多维数组对没有自定义键ID的数组进行排序,并且该数组已设置好,但是此数组包含自定义键,而我需要按日期排序:

My array is: 我的数组是:

$newDataSet = array(
 '2017-02-03' => array(
  array(
    array(
     'name' => 'Paul',
     'state' => 'in',
     'date' => '2017-02-03'    
    ),
    array(
     'name' => 'Paul',
     'state' => 'out',
     'date' => '2017-02-03'    
    )
  )
 ),
'2017-01-02' => array(
  array(
    array(
     'name' => 'John',
     'state' => 'in',
     'date' => '2017-01-02'    
    ),
    array(
     'name' => 'John',
     'state' => 'out',
     'date' => '2017-01-02'    
    )
  )
 ),
'2017-04-01' => array(
  array(
    array(
     'name' => 'Smith',
     'state' => 'in',
     'date' => '2017-04-01'    
    ),
    array(
     'name' => 'Smith',
     'state' => 'out',
     'date' => '2017-04-01'    
    )
  )
 )
);

uasort($newDataSet, function($a, $b) { return($a['date'] - $b['date']); });

As I understand usort will sort only the array of the multidimensional, so in my case is wrong because I don't have the structure to use it, is there a way to order by key asc ? 据我了解,usort只会对多维数组进行排序,因此在我的情况下是错误的,因为我没有使用它的结构,是否可以通过键asc进行排序? I mean by date asc ? 我是说按date升序?

Any hint/documentation for better understanding is appreciated. 任何提示/文档,以更好地理解,不胜感激。

Expected result: 预期结果:

$newDataSet = array(
     '2017-01-02' => array(
      array(
        array(
         'name' => 'Paul',
         'state' => 'in',
         'date' => '2017-01-02'    
        ),
        array(
         'name' => 'Paul',
         'state' => 'out',
         'date' => '2017-01-02'    
        )
      )
     ),
    '2017-02-03' => array(
      array(
        array(
         'name' => 'John',
         'state' => 'in',
         'date' => '2017-02-03'    
        ),
        array(
         'name' => 'John',
         'state' => 'out',
         'date' => '2017-02-03'    
        )
      )
     ),
    '2017-04-01' => array(
      array(
        array(
         'name' => 'Smith',
         'state' => 'in',
         'date' => '2017-04-01'    
        ),
        array(
         'name' => 'Smith',
         'state' => 'out',
         'date' => '2017-04-01'    
        )
      )
     )
    );

you can use ksort(), live demo . 您可以使用kso​​rt(), live demo

ksort($newDataSet);
print_r($newDataSet);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM