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;
}

寫在最后,上面數組截圖,就是處理之后的。當然,如果二維數組是單數,就是如下,最后一個只有前半,因為后一般已經沒有數據了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM