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

相關文章
相關標籤/搜索