需求:由於以前的帖子列表,是一行放一個,因此直接一個循環便可。如今新增長了一個模塊,這個模塊的帖子列表樣式是一行放兩個,原本想讓前端作成自適應,這樣就能夠共用一個數組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