需求:因为之前的帖子列表,是一行放一个,所以直接一个循环即可。现在新增加了一个模块,这个模块的帖子列表样式是一行放两个,本来想让前端做成自适应,这样就可以共用一个数组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;
}

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

 

 

内容来源于网络如有侵权请私信删除