需求:由于以前的帖子列表,是一行放一个,因此直接一个循环便可。如今新增长了一个模块,这个模块的帖子列表样式是一行放两个,原本想让前端作成自适应,这样就能够共用一个数组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