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

需求:由于以前的帖子列表,是一行放一个,因此直接一个循环便可。如今新增长了一个模块,这个模块的帖子列表样式是一行放两个,原本想让前端作成自适应,这样就能够共用一个数组list的,可是因为历史版本是使用的table标签,因此最后仍是须要改下列表的数据结构。前端

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

 

 会遇到的问题:拆分与合并中,主要是对于二维数组,若是是单数,就会致使后通常(加_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;
}

写在最后,上面数组截图,就是处理以后的。固然,若是二维数组是单数,就是以下,最后一个只有前半,由于后通常已经没有数据了。spa

相关文章
相关标签/搜索