gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:34:57 25 4
gpt4 key购买 nike

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

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。

任何人都可以分享任何见解吗?我考虑过检查每个项目,看看是否可以将它与数组中的前一个分组,但前一个可能不一定相关,甚至不一定是照片。我的大脑完全卡住了:(

最佳答案

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

  • 在 15 分钟的窗口中保留一个包含所有照片的数组(我们称之为 $foo)。将数组用作 FIFO 列表(使用 <a href="http://www.php.net/array_shift" rel="noreferrer noopener nofollow">array_shift</a> 删除项目,使用 $foo[] = ... 添加项目)。
  • 遍历原始数组
    • 检查当前项目的日期并从$foo的开头删除日期比当前项目短 15 分钟以上的所有条目。一旦您找到与 15 分钟前发生的事情相关的项目,您就可以停止(这是一个单行 for 循环)。
    • 遍历 $foo 中的条目
    • 如果找到同一个人的照片,则
      • 更改存储在 $foo 中的引用以便添加新数据
      • 从原数组中移除当前项
      • 跳出内循环
    • 如果没有
      • 在末尾添加对当前项目的引用$foo$foo = &$var .

然后您可以使用 array_values 重新索引原始数组填补空白。

关于php - 根据用户和创建时间对 php 数组项进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com