我有一个带有以下键的PHP数组:
comm_id,
user_name,
comm_type,
comm_message,
created_at
该阵列的一些示例数据如下:
Gandalf Greybeard,电子邮件,电子邮件示例,2014-01-03 23:00:00
Joffrey Baratheon,Text,Nasty piece of work,2014-01-03 23:20:00
Gandalf Greybeard,Text,Test,2014-01-03 23:10:00
Tyrion Lannister,Log,此邮件来自Tyrion Lannister,2014-01-03 23:30:00
Gandalf Greybeard,电子邮件,另一项测试,2014-01-03 23:40:00
我如何为数组中的每个用户创建一个只有user_name的最新通信数组(不管comm_type),所以只有id的5,4和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'];
}
}
您可能需要将日期转换为实际日期对象,以便进行比较。