这是一组显示用户上传照片的对象:
Array
(
[12] => stdClass Object
(
[type] => photo
[created] => 2010-05-14 23:36:41
[user] => stdClass Object
(
[id] => 760
[username] => mrsmith
)
[photo] => stdClass Object
(
[id] => 4181
)
)
[44] => stdClass Object
(
[type] => photo
[created] => 2010-05-14 23:37:15
[user] => stdClass Object
(
[id] => 760
[username] => mrsmith
)
[photo] => stdClass Object
(
[id] => 4180
)
)
)
但不是显示:
史密斯先生上传了一张照片
史密斯先生上传了一张照片
我想显示:
通过对类似的项目进行分组,按用户ID进行分组并将它们添加到其中,让我们说15分钟。所以我想把阵列变成这种形状:
Array
(
[12] => stdClass Object
(
[type] => photo
[created] => 2010-05-14 23:36:41
[user] => stdClass Object
(
[id] => 760
[username] => mrsmith
)
[photos] => Array
(
[0] => stdClass Object
(
[id] => 4181
)
[1] => stdClass Object
(
[id] => 4180
)
)
)
)
保留组中的第一项并创建时间,并将其与任何其他可分组照片一起补充,然后取消设置任何已分组的项目(因此最终数组不再具有键44,因为它已与12组合在一起)。
该数组包含除了照片之外的其他操作,因此原始键为12和44.我只是无法找到一种方法来有效地执行此操作。我曾经使用MySQL和PHP来做这件事,但我试图只使用纯PHP来缓存。
任何人都可以提出任何见解吗?我考虑过浏览每个项目,看看我是否可以将它与数组中的前一个项目分组,但前一个可能不一定是相关的,甚至不是照片。我的全脑冻结了:(
答案 0 :(得分:1)
如果条目按日期排序,您可以执行以下操作:
$foo
)和所有照片。将数组用作FIFO列表(使用array_shift
删除项目并$foo[] = ...
添加)。$foo
的开头删除所有日期比当前项目少15分钟以上的条目。一旦你发现一件物品发生在不到15分钟前发生的事情,你就可以停下来(这是一行换行)。$foo
$foo
中存储的引用,以便添加新数据$foo
将当前项目的引用添加到结尾$foo = &$var
。然后,您可以使用array_values重新索引原始数组,以填补空白。