• PHP将一个二维数组对半切割成一个新的二维数组


    需求:因为之前的帖子列表,是一行放一个,所以直接一个循环即可。现在新增加了一个模块,这个模块的帖子列表样式是一行放两个,本来想让前端做成自适应,这样就可以共用一个数组list的,但是由于历史版本是使用的table标签,所以最后还是需要改下列表的数据结构。

    具体问题点:如下截图,就是对一个二维数组按片段拆分,并且按添加指定后缀进行合并,成一个新数组

     会遇到的问题:拆分与合并中,主要是对于二维数组,如果是单数,就会导致后一般(加_s后缀的一段不全),这里对于二维数组如果只有 1个,2个,或是超过2个以上的并且是单数和的,这三种做特殊对待,其他的直接按规则处理。

    最后代码如下:直接传入需要处理的二维数组,最后方法返回处理后的数组

    /**
     * 将一个二维数组对半切切开拼接成一个新的数组
     * 如数组[[1],[2],[3],[4],[5]]对切割成[[1,2],[3.4][5]]
     * @param [type] $threaddb
     * @return void
     */
    function splitInHalfArray($threaddb){
        $threaddb_new = [];//定义一个,最内层数组收集器
        $threaddb_new_web = [];//定义一个,最终数组收集器
        $threaddb_new_web_tail = [];//定义一个,$threaddb数组个数超过2的尾巴收集器
        $threaddb_count = count($threaddb);
        switch($threaddb_count){
            case 1://帖子只有一个
                foreach(current($threaddb) as $key => $value){//格式化二维数组键名,去掉第一次键名
                    $threaddb_new[$key] = $value;
                }
                $threaddb_new_web[] = $threaddb_new;
            break;
            case 2://帖子有二个
                $threaddb_new = current($threaddb);//获取第一个数组,直接追加
                //获取最后一个数组,新增键名后缀'_s'后,再次追加
                foreach(end($threaddb) as $key => $value){
                    $threaddb_new[$key.'_s'] = $value;
                }
                $threaddb_new_web[0] = $threaddb_new;
            break;
            default://帖子有三个(含三)个以上
                $n = 0;
                foreach($threaddb as $key => $value){
                    $n ++;
                    if($n % 2 != 0){//单数第一个,直接追加
                        foreach($value as $key_s => $value_s){
                            $threaddb_new[$key_s] = $value_s;
                        }
                    }else{//双数第二个,新增键名后缀'_s'后,再次追加
                        foreach($value as $key_s => $value_s){
                            $threaddb_new[$key_s.'_s'] = $value_s;
                        }
                    }
                    if($n % 2 == 0){//每循环两次,将拼接的数组,追加到新的数组中
                        $threaddb_new_web[] = $threaddb_new;
                    }elseif($n == $threaddb_count && $n % 2 != 0){//如果是$threaddb的最后一个数组 并且 $threaddb数组个数是单数
                        foreach(end($threaddb) as $key => $value){
                            $threaddb_new_web_tail[$key] = $value;
                        }
                        $threaddb_new_web[] = $threaddb_new_web_tail;
                    }
                }
        }
        return $threaddb_new_web;
    }

    写在最后,上面数组截图,就是处理之后的。当然,如果二维数组是单数,就是如下,最后一个只有前半,因为后一般已经没有数据了。

  • 相关阅读:
    iBatis查询时报“列名无效”无列名的错误原因及解决方法
    【转】Spring结合Quartz实现多任务定时调用
    关于jar中读取包内和包外文件
    【摘自百度文库】数据库水平切分的实现原理解析
    web.xml 中的listener、 filter、servlet 加载顺序及其详解(转载)
    EL表达式
    【转】使用XFire+Spring构建Web Service
    慎用href="javascript:void(0)"
    POI导出EXCEL【摘自:oschina.net】
    【转】IBM websphere6.1 不支持泛型、intInteger类型的自动装箱和拆箱问题
  • 原文地址:https://www.cnblogs.com/camg/p/14271635.html
Copyright © 2020-2023  润新知