基于密钥对PHP进行排序

时间:2014-01-04 23:47:27

标签: php arrays

我有一个带有以下键的PHP数组:

comm_id, 
user_name, 
comm_type, 
comm_message, 
created_at

该阵列的一些示例数据如下:

  1. Gandalf Greybeard,电子邮件,电子邮件示例,2014-01-03 23:00:00

  2. Joffrey Baratheon,Text,Nasty piece of work,2014-01-03 23:20:00

  3. Gandalf Greybeard,Text,Test,2014-01-03 23:10:00

  4. Tyrion Lannister,Log,此邮件来自Tyrion Lannister,2014-01-03 23:30:00

  5. Gandalf Greybeard,电子邮件,另一项测试,2014-01-03 23:40:00

  6. 我如何为数组中的每个用户创建一个只有user_name的最新通信数组(不管comm_type),所以只有id的5,4和2?

2 个答案:

答案 0 :(得分:1)

循环遍历数组,使用user_name的键创建一个新数组。如果密钥不存在或者具有更高的created_at ...

,则仅插入到数组中 像这样:

$final_array = array()
foreach ($comm_log as $comm) {
  if (!key_exists($comm['comm_id'], $final_array) 
      || $final_array[$comm['comm_id']] < $comm['created_at']) 
    {
       $final_array[$comm['comm_id']] = $comm
    }
}

你的$ final_array只会有最新的通讯。

答案 1 :(得分:0)

您可以迭代通信,在每种情况下保持最大值。

$result = array();
foreach($communications as $communication) {
    $user = $communication['user_name'];
    if (isset($result[$user])){
        $result[$user] = max($result[$user], $communication['created_at']);
    } else {
        $result[$user] = $communication['created_at'];
    }
}

您可能需要将日期转换为实际日期对象,以便进行比较。