• 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做键去处理数组,其中心思想是同一种。

  • 相关阅读:
    QEMU KVM Libvirt手册(10):Managing Virtual Machines with libvirt
    Openssl的证书操作
    QEMU KVM Libvirt手册(10): KVM的各种限制
    QEMU KVM Libvirt手册(9): network
    nginx调优(一)
    Apache调优(二)
    Apache调优(一)
    使用Varnish为网站加速
    Linux系统调优——系统整体运行状态排查(六)
    Linux系统调优——内核相关参数(五)
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/10592345.html
Copyright © 2020-2023  润新知