2016-12-29 16 views
3

以下代碼是我的函數返回顯示類別列表。將陣列轉換爲另一種格式

我的結構:

Parent_category - >分類 - > Child_category

現在我結合child_category與類別,並加入到categoryis_bold PARAM。

這裏的方法:

public function categories(){ 
    $categories = self::buildTree(Category::get()->toArray()); 
    $cats = $categories; 
    foreach($cats as $key=>$category){ 
    if(count($category['childs'])>0){ 
     foreach($category['childs'] as $key1=>$c){ 
     if(count($c['childs'])>0){ 
      $categories[$key]['childs'] = array_merge($categories[$key]['childs'], $c['childs']); 
      unset($categories[$key]['childs'][$key1]['childs']); 
      $categories[$key]['childs'][$key1]['is_bold']=1; 
     } 
     } 
     $categories[$key]['childs'] = self::array_sort($categories[$key]['childs'], 'id', SORT_ASC); 
    } 
    } 
    return response()->json(array('data' => $categories), 200); 
} 

這裏的buildTree方法:

public static function buildTree(array $elements, $parentId = null){ 
    $result = array(); 
    foreach ($elements as $element) { 
     if($element['parent_id'] == $parentId) { 
      $children = self::buildTree($elements, $element['id']); 
      $element['childs'] = []; 
      if ($children) $element['childs'] = $children; 
      $result[$element['id']] = $element; 
     } 
    } 
    return array_values($result); 
} 

這是我回報

"data": [ 
{ 
    "id": 1, 
    "parent_id": null, 
    "name": "tv", 
    "icon": null, 
    "slack": null, 
    "childs": [ 
    { 
     "id": 2, 
     "parent_id": 1, 
     "name": "tvs", 
     "icon": null, 
     "slack": null, 
     "is_bold": 1 
    }, 
    { 
     "id": 3, 
     "parent_id": 2, 
     "name": "LED tvs", 
     "icon": null, 
     "slack": null, 
     "childs": [] 
    }, 
    { 
     "id": 4, 
     "parent_id": 2, 
     "name": "4K tvs", 
     "icon": null, 
     "slack": null, 
     "childs": [] 
    }, 
    { 
     "id": 5, 
     "parent_id": 1, 
     "name": "videos", 
     "icon": null, 
     "slack": null, 
     "is_bold": 1 
    }, 
    { 
     "id": 6, 
     "parent_id": 5, 
     "name": "home cinema", 
     "icon": null, 
     "slack": null, 
     "childs": [] 
    }, 
    { 
     "id": 7, 
     "parent_id": 5, 
     "name": "videoplayers", 
     "icon": null, 
     "slack": null, 
     "childs": [] 
    }] 
}] 

但現在我想這樣的返回數據:

{ 
    "id": 1, 
    "parent_id": null, 
    "name": "Телевизоры, аудио, видео", 
    "icon": null, 
    "slack": null, 
    "childs": [ 
    "televizory": [ { 
     "id": 2, 
     "parent_id": 1, 
     "name": "Телевизоры", 
     "icon": null, 
     "slack": null, 
     "is_bold": 1 
    }, 
    { 
     "id": 3, 
     "parent_id": 2, 
     "name": "LED телевизоры", 
     "icon": null, 
     "slack": null, 
    }, 
    { 
     "id": 4, 
     "parent_id": 2, 
     "name": "4K Телевизоры", 
     "icon": null, 
     "slack": null, 
    }], 
    video": [ { 
     "id": 5, 
     "parent_id": 1, 
     "name": "Домашнее видео, аудио", 
     "icon": null, 
     "slack": null, 
     "is_bold": 1 
    }, 
    { 
     "id": 6, 
     "parent_id": 5, 
     "name": "Домашние кинотеатры", 
     "icon": null, 
     "slack": null, 
    }, 
    { 
     "id": 7, 
     "parent_id": 5, 
     "name": "Видеоплееры", 
     "icon": null, 
     "slack": null, 
    }, 
    { 
     "id": 8, 
     "parent_id": 5, 
     "name": "Проекторы", 
     "icon": null, 
     "slack": null, 
    }, 
    { 
     "id": 9, 
     "parent_id": 5, 
     "name": "Акустика Hi-Fi", 
     "icon": null, 
     "slack": null, 
    }, 
    { 
     "id": 10, 
     "parent_id": 5, 
     "name": "Аксессуары", 
     "icon": null, 
     "slack": null, 
    }] 

回答

1

你可以使用Laravel的Collection class。

只需更換

if ($children) $element['childs'] = $children; 

if ($children) { 
    $children = new \Illuminate\Support\Collection($children); 
    $element['childs'] = $children->keyBy('name')->toArray(); 
} 

keyBy()方法替換集合中的元素的鍵與元素的選擇屬性值 - 你的情況。

相關問題