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
php 数组字符串转数组总之,这⼏个办法都已经是很简便的快捷办法了,最⼤限度的利⽤id进⾏分组索引化,让id做键去处理数组,其中⼼思想是同⼀种。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论