我一直在尝试将数组中的项目分组一段时间。你知道当你在Facebook上发布图像时,如果它们在x分钟内彼此分开上传,它们会在一个帖子中组合在一起吗?这就是我想要实现的目标。
后端解决方案:每次用户将图像发布到特定事件,并在" newsfeed"中输入。使用指针(id)创建表到另一个表中的上传行id。然后php脚本分别抓取所有帖子并将它们放在一个数组中。
现在,鉴于我知道如何衡量两个创建日期之间的时间差异,我该如何对数组进行排序,以便数组中的每个条目都包含通过上载日期相隔x分钟的图像分开?
提前致谢!
到目前为止,我所获得的代码已接近此解决方案,但它仍然会将项目添加到每个单个图像帖子的最终数组中。你可以在这里看到这个结果:
正如您所看到的那样,最后三个帖子应该全部在同一个帖子中,因为它们会在10分钟内相互上传。这三个中最重要的一个看起来像我想要的结果,但是有两个帖子似乎是作为foreach迭代的单独步骤添加的。如何制作我的"算法"忽略那些?代码,至少在我看来时,应该做的工作。
$newsfeed = array();
$event_uploads = array();
foreach ($get_newsfeed as $item) {
if ($item["type"]["id"] == 5) {
$query = "select * from event_album_uploads where id = ". $item["text"];
$get_event_upload = $db->query($query);
foreach ($get_event_upload as $event_upload) {
if (empty($event_uploads)) {
$item["images"] = array("0" => $event_upload);
array_push($event_uploads, $item);
} else {
foreach ($event_uploads as $key => $upload) {
if ($item["item_id"] == $upload["item_id"] && $item["other_id"] == $upload["other_id"]) {
$itemDate = new DateTime($item["date"]);
$uploadDate = new DateTime($upload["date"]);
$difference = $uploadDate->diff($itemDate);
if ($difference->i < 10) {
$images = $event_uploads[$key]["images"];
array_push($images, $event_upload);
$event_uploads[$key]["images"] = $images;
} else {
$item["images"] = array("0" => $event_upload);
array_push($event_uploads, $item);
}
} else {
$item["images"] = array("0" => $event_upload);
array_push($event_uploads, $item);
}
}
}
}
} else {
array_push($newsfeed, $item);
}
}