php处理数据分组问题
很简单的一个需求,将数据库取出的二维数组进行按照id分组,同组的数据用逗号连接,例如:
处理为
就是按照id分组,name进行逗号拼接。
那么按照数据库的思路来说,采用group_concat即可,如果有重复,可使用group_concat(distinct 字段) 即可。(这是有风险的,当数据量足够多的时候会超出group_concat的极限,到时候出现数据截断)
对于PHP而言,可以用很多种方式处理,网友们给出他的解法千奇百怪,但是效率都不是太高,双重循环解决问题可读性也不好,下面我总结几种自己考虑出来的方式。
解法1:
先循环一次以id做键,处理为数组,然后再次循环,将name下面的数组转字符串。复杂度:≤2n
解法2:
减少第二次循环,直接用拼接解决
这个做了isset判断,如果有则拼接,如果没有,则赋值,按道理说这里已经完成了,后面用array_values是为了将数组转为索引数组。复杂度:n+array_values函数调用一次
解法3:
去掉array_values处理最后的数组索引问题,直接一步到位索引。
这里采用i自增方法,做键值对映射到hash中去,直接明确了索引元素的位置,直接赋值,但是测试发现,这个执行时间的效率并没有array_values高,可能是array_values底层采用c语言编写,这个数组索引赋值等过程的操作可能有些缓慢,这也可能和内存有关,空间换时间,提高重置索引效率。复杂度:n
总之,这几个办法都已经是很简便的快捷办法了,最大限度的利用id进行分组索引化,让id做键去处理数组,其中心思想是同一种。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2016-03-25 php 写一个水仙花数的函数