【问题标题】:Sort array on timestamp按时间戳排序数组
【发布时间】:2012-04-28 17:01:08
【问题描述】:

我有一个如下格式的数组:

array
  0 => 
    array
      1335541286 => 
        array
          'event' => string 'track' (length=5)
          'title' => string 'Plastic Humans' (length=14)
          'album' => string 'Cities of hunger' (length=16)
          'artist' => string 'The Maple Room' (length=14)
  1 => 
    array
      1335540999 => 
        array
          'event' => string 'track' (length=5)
          'title' => string 'Atlantis' (length=8)
          'album' => string 'Cities of hunger' (length=16)
          'artist' => string 'The Maple Room' (length=14)
  2 => 
    array
      1335540064 => 
        array
          'event' => string 'track' (length=5)
          'title' => string 'Doradus Stars' (length=13)
          'album' => string 'A Glimpse of the Inside' (length=23)
          'artist' => string 'The Maple Room' (length=14)
  3 => 
    array
      1335539855 => 
        array
          'event' => string 'track' (length=5)
          'title' => string 'In Twenty Five' (length=14)
          'album' => string 'A Glimpse of the Inside' (length=23)
          'artist' => string 'The Maple Room' (length=14)
  4 => 
    array
      1334016000 => 
        array
          'event' => string 'purchase' (length=8)
          'title' => string 'Donald Trump - Single' (length=21)
          'artist' => string 'Mac Miller' (length=10)
          'format' => string '10"' (length=3)

我很想根据键(即时间戳)对数组进行排序。我已经阅读了很多关于 PHP 排序方法的内容,但我不知道最好的解决方案是什么。

感谢任何帮助,

【问题讨论】:

    标签: php arrays sorting timestamp


    【解决方案1】:

    使用缩小数据:

    $data = array(
      array('1335541286' => array('1')),
      array('1335540999' => array('1')),
      array('1335540064' => array('1')),
    );
    
    usort($data, function ($a, $b) {
      return key($a) - key($b);
    });
    
    print_r($data);
    

    您的输入数据的结构也似乎有点奇怪。额外的级别并不是真正需要的,并且不必要地使事情复杂化。

    【讨论】:

    • 我需要它,以便我可以为多个项目使用相同的时间戳
    • @turncoat 然后我将使用时间戳作为键,并将一组项目作为值。删除数组中的第一层,并直接启用ksort
    • 我以为你不能在数组中使用相同的键
    • @turncoat,你会得到array(timestamp => array(array(value1), array(value2), ..., array(valueN)), nextTimestamp => ...)
    • Radu 解决方案对我有用。我更喜欢这样,所以我不需要重新设计我的数组结构。
    【解决方案2】:
    uasort($array, 'cmp');
    
    function cmp($a, $b)
    {
        if (key($a) == key($b)) {
            return 0;
        }
        return (key($a) < key($b)) ? -1 : 1;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2020-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多