按时间戳排序多维数组


PHP - sort a multidimensional array by timestamp

我在问这里之前已经试过几次了,我也看到过这个问题

与我的相似,但不幸的是它不起作用(或者我可以让它工作)。

我有一个像这样的数组:

    Array (
  [user_1] => Array 
            (
              [0] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [1] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [2] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                )
            ),
  [user_2] => Array 
            (
              [0] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [1] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                ),
              [2] => Array
                (
                  [category] => string_var
                  [time] => unix_timestamp 
                )
            )
      )

对于每个用户,我必须按时间戳对第二级数组进行排序。

因此,我试过:

foreach ($array as $user => $user_data) {
    timestamps = array();
    foreach($user_data as $key => $actual_data) {
       $timestamps[$key] = $actual_data['time'];
    }
    array_multisort($timestamps, SORT_ASC, $user_data);
}
unset($timestamps);
print_r($array); // the original array should now be sorted by timestamp

没有排序,最终的数组就是原来的数组

:

  • 键['time']进入第二级数组来自MYSQL列它被存储为BIGINT。var_dump给我:int(1432587949),所以它不应该是一个变量类型的问题
  • 我也试过ussort,结果相同:没有排序

我错在哪里?由于

您想要这样做:

array_walk($array, function(&$arr) {usort($arr, function($a,$b){return ($a["time"] < $b["time"]) ? -1 : ($a["time"] > $b["time"] ? 1 : 0);});});

但是既然你说数据来自数据库,那么我建议你在那里排序,因为它可能比在php中排序更快。