我是靠谱客的博主 大方摩托,最近开发中收集的这篇文章主要介绍php对分组数据处理,php处理数据分组问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

很简单的一个需求,将数据库取出的二维数组进行按照id分组,同组的数据用逗号连接,例如:

833cee704d435a0da8d37da33bb09f26.png

处理为

68b96912c9af0a33afc98d9efb50dd9b.png

就是按照id分组,name进行逗号拼接。

那么按照数据库的思路来说,采用group_concat即可,如果有重复,可使用group_concat(distinct 字段) 即可。(这是有风险的,当数据量足够多的时候会超出group_concat的极限,到时候出现数据截断)

对于PHP而言,可以用很多种方式处理,网友们给出他的解法千奇百怪,但是效率都不是太高,双重循环解决问题可读性也不好,下面我总结几种自己考虑出来的方式。

解法1:

1361104f6dccf202c33c9b5ddfe0ae3b.png

先循环一次以id做键,处理为数组,然后再次循环,将name下面的数组转字符串。复杂度:≤2n

解法2:

减少第二次循环,直接用拼接解决

05b132ae31eaaddc11079ed2df034957.png

这个做了isset判断,如果有则拼接,如果没有,则赋值,按道理说这里已经完成了,后面用array_values是为了将数组转为索引数组。复杂度:n+array_values函数调用一次

解法3:

去掉array_values处理最后的数组索引问题,直接一步到位索引。

b33275bc0681ecdd1b95b9d13ad59890.png

这里采用i自增方法,做键值对映射到hash中去,直接明确了索引元素的位置,直接赋值,但是测试发现,这个执行时间的效率并没有array_values高,可能是array_values底层采用c语言编写,这个数组索引赋值等过程的操作可能有些缓慢,这也可能和内存有关,空间换时间,提高重置索引效率。复杂度:n

总之,这几个办法都已经是很简便的快捷办法了,最大限度的利用id进行分组索引化,让id做键去处理数组,其中心思想是同一种。

最后

以上就是大方摩托为你收集整理的php对分组数据处理,php处理数据分组问题的全部内容,希望文章能够帮你解决php对分组数据处理,php处理数据分组问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部