首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据用户和创建时间对php数组项进行分组

根据用户和创建时间对php数组项进行分组
EN

Stack Overflow用户
提问于 2010-05-15 16:29:39
回答 1查看 382关注 0票数 0

这是一个显示用户上传照片的对象数组:

代码语言:javascript
运行
复制
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分钟。因此,我想得到这种形状的数组:

代码语言:javascript
运行
复制
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。

谁能说出真知灼见?我考虑过每一项,看看是否可以将其与数组中的前一项进行分组,但前一项可能不一定相关,甚至不一定是一张照片。我的大脑完全冻结了

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-15 17:53:55

如果按日期排序,则可以执行以下操作:

  • 保持一个数组(让我们称之为$foo),在15分钟的窗口中保存所有的照片。使用数组作为FIFO列表(使用array_shift删除项,使用$foo[] = ...添加项)。
  • 迭代原始数组
    • 检查当前项的日期,并从$foo开头删除日期比当前项少15分钟以上的所有条目。一旦您找到一个项目,对于不到15分钟前发生的事情,您可以停止(这是一个一行循环)。
    • 迭代$foo中的条目
    • 如果找到同一人的照片,那么
      • 更改存储在$foo中的引用,以便添加新数据
      • 从原始数组中删除当前项
      • 脱离内回路

代码语言:javascript
运行
复制
- If not  
    - Add a reference to the current item to the end `$foo` with `$foo = &$var`.

然后,可以用重新编制原始数组的索引,以填补空白。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2840860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档