PHP - 数组中的组项如何?

时间:2017-05-04 02:28:47

标签: php arrays sorting

我一直在尝试将数组中的项目分组一段时间。你知道当你在Facebook上发布图像时,如果它们在x分钟内彼此分开上传,它们会在一个帖子中组合在一起吗?这就是我想要实现的目标。

后端解决方案:每次用户将图像发布到特定事件,并在" newsfeed"中输入。使用指针(id)创建表到另一个表中的上传行id。然后php脚本分别抓取所有帖子并将它们放在一个数组中。

现在,鉴于我知道如何衡量两个创建日期之间的时间差异,我该如何对数组进行排序,以便数组中的每个条目都包含通过上载日期相隔x分钟的图像分开?

提前致谢!

到目前为止,我所获得的代码已接近此解决方案,但它仍然会将项目添加到每个单个图像帖子的最终数组中。你可以在这里看到这个结果:

image of result

正如您所看到的那样,最后三个帖子应该全部在同一个帖子中,因为它们会在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);
    }
}

0 个答案:

没有答案