【问题标题】:PHP - sort a multidimensional array by timestamp [duplicate]PHP - 按时间戳对多维数组进行排序[重复]
【发布时间】:2015-05-27 14:46:53
【问题描述】:

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

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

我有一个这样的数组:

    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),所以它不应该是变量类型问题
  • 我也尝试过 usort,结果相同:没有排序。

我哪里错了?谢谢

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:

    你想做这样的事情:

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

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

    【讨论】:

    • 感谢您的回复。您能否用我的示例的数组名称重命名 $data 和 $arr ?谢谢
    • @sciakysystem: 完成,$arr 只是内部参数名称。
    • 那行得通。谢谢。我正在尝试错误的方法。你明白这一点。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2012-04-23
    相关资源
    最近更新 更多