2016-12-29 4 views
3

次のコードは、表示カテゴリリストのmy関数の戻り値です。配列を別の形式に変換する

マイ構造:

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のコレクションクラスを使用できます。

単に置き換える

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

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

keyBy()メソッドは、それらの要素の選択した属性の値で、コレクションの要素のキーを置き換えると - あなたのケースで

関連する問題