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; }
写在最后,上面数组截图,就是处理之后的。当然,如果二维数组是单数,就是如下,最后一个只有前半,因为后一般已经没有数据了。
-----END
影子是一个会撒谎的精灵,它在虚空中流浪和等待被发现之间;在存在与不存在之间....