2017-09-26 117 views
0

我有一些問題與嵌套集合到下拉...組嵌套的JSON在laravel

當我這樣做:

$selects = Category::defaultOrder()->withDepth()->get()->toTree(); 

我得到這個JSON:https://pastebin.com/Cw4TbWyA

我想什麼有:

Collection {#196 ▼ 
    #items: array:7 [▼ 
    1 => "123" 
    4 => "- test2" 
    6 => "- test4" 
    2 => "1234" 
    5 => "- test3" 
    7 => "-- testtest" 
    3 => "test1" 
    ] 
} 

或任何其他方式來正確填寫下拉菜單。如果有幫助,我使用laravel。

回答

0

THX答案,但我發現一點點簡單的解決方案:

$items = Category::withDepth()->defaultOrder()->get(); 

$list = array(); 

foreach ($items as $item) { 

    $list[$item->id] = str_repeat('-', $item->depth) . $item->name; 

} 
0

您可以使用array_walk_recursive從現有的json中創建新的名稱數組。請嘗試以下操作:

$nameArray = array(); 
$items = json_decode($itemsJson); 
array_walk_recursive($items, 'getName'); 

function getName(&$item, $key) 
{ 
    if($key == 'name') 
    $nameArray[] = $item; 
} 

echo '<pre>'; 
echo json_encode($nameArray); 

使用array_walk_recursive($ this,'getName'));如果在一個PHP框架控制器中使用。

0

試試這個

$categories = Category::defaultOrder()->withDepth()->get()->toTree(); 

$traverse = function ($categories, $prefix = '-') use (&$traverse) { 
    foreach ($categories as $category) { 
     echo PHP_EOL.$prefix.' '.$category->name; 

     $traverse($category->children, $prefix.'-'); 
    } 
}; 

$traverse($nodes);