需求:因為之前的帖子串列,是一行放一個,所以直接一個回圈即可,現在新增加了一個模塊,這個模塊的帖子串列樣式是一行放兩個,本來想讓前端做成自適應,這樣就可以共用一個陣列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; }
寫在最后,上面陣列截圖,就是處理之后的,當然,如果二維陣列是單數,就是如下,最后一個只有前半,因為后一般已經沒有資料了,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248399.html
標籤:PHP
上一篇:了解PHP-FPM
