1. 程式人生 > >二維陣列進行排序並且合併

二維陣列進行排序並且合併

之前專案要到一個這樣的需求:

表結構:

我這邊想實現一個 列表顯示:某個時間下的(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 就是我們最終實現的效果了:


這裡面很多地方值得優化,這邊只是做了一個簡單的demo。