二維陣列進行排序並且合併
阿新 • • 發佈:2019-01-10
之前專案要到一個這樣的需求:
表結構:
我這邊想實現一個 列表顯示:某個時間下的(grouo_time年月日)哪位大咖(作者did)發表了哪些文章,合併到一起產品原型憋了很長時間,因為前期產品不固定,就讓我們這群程式設計師開始寫,寫著寫著需求又變了然後各種修改 ,搞的自己都開始懷疑人生了。
laravel+ORM(mongodb)
第一步:
列印的結果如下:
第二步:
$article_sort = self::initArray($group_time); 對當前的陣列進行整理
public static function initArray(array $array) { $newArray = []; foreach ($array as $item) { if (isset($newArray[$item['group_time']])) { $newArray[$item['group_time']]['list'][] = ['title'=>$item['article_title'],'introduction_first'=>$item['introduction_first'],'editor_url'=>$item['editor_url'], 'covers_url'=>$item['covers_url'],'add_time'=>$item['add_time']]; } else { $arrays = [ 'title'=>$item['article_title'], 'introduction_first'=>$item['introduction_first'],//導言1 'editor_url'=>$item['editor_url'],//編輯上傳圖片 'covers_url'=>$item['covers_url'],//編輯上傳圖片 'add_time'=>$item['add_time']//編輯上傳圖片 ]; $newArray[$item['group_time']] = ['group_time' => date('Y-m-d',$item['group_time']),'nickname'=>$item['dern_info']['nickname'],'avatar'=>$item['dern_info']['avatar'],'did'=>$item['did'], 'list' => [$arrays]]; // dd($newArray); } } return $newArray; }
另一種轉換方法:
我用的上面哪個,主要下面這種寫法看起來怪怪的
function initArray(array $array) { $newArray = []; array_map(function ($item) use(&$newArray){ if (isset($newArray[$item['group_time']])) { $newArray[$item['group_time']]['did'][] = $item['did']; } else { $newArray[$item['group_time']] = ['group_time' => $item['group_time'], 'did' => [$item['did']]]; } },$array); return $newArray; }
最後列印article_sort 就是我們最終實現的效果了: