【问题标题】:Sort multidimensional array by key of set of array按数组集的键对多维数组进行排序
【发布时间】:2017-06-20 14:52:48
【问题描述】:

我正在寻找一种通过键对多维数组进行排序的解决方案,关键是我可以对一组没有自定义键 ID 且数组在集合中的多维数组进行排序,但该数组包含自定义键,我需要按日期排序:

我的数组是:

$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']); });

据我了解, usort 只会对多维数组进行排序,所以在我的情况下是错误的,因为我没有使用它的结构,有没有办法按键 asc 排序?我的意思是dateasc?

感谢任何提示/文档以更好地理解。

预期结果:

$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'    
        )
      )
     )
    );

【问题讨论】:

  • 你好@GisoStallenberg 我希望从数据库中按日期 ASC 进行排序做一个 foreach 并按日期分组,我创建了一组新的数组,但是你可以看到日期不是按 ASC 排序的。谢谢
  • 好的,对我来说,我还不清楚预期的结果是什么。您可以添加预期的结果吗?
  • 内部数组日期相同,无需排序
  • 我猜你不是按键date排序,而是按`$newDataSet'的索引

标签: php arrays sorting multidimensional-array


【解决方案1】:

你可以使用 ksort(),live demo

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

【讨论】:

  • 我已经尝试过这种方式,但没有工作,我不明白为什么,也许我的查询有问题,但现在没问题,排序正确。谢谢
猜你喜欢
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
相关资源
最近更新 更多