2017-09-26 1 views
0

J'ai quelques problèmes avec Nested Set ...Nested mis JSON déroulante Laravel

Quand je fais ceci:

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

Je reçois ce JSON: https://pastebin.com/Cw4TbWyA

Ce que je veux ont:

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

Ou tout autre moyen de remplir la liste déroulante correctement. J'utilise laravel si ça aide.

Répondre

0

Thx pour trouver des réponses, mais je l'ai trouvé un peu plus facile solution:

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

$list = array(); 

foreach ($items as $item) { 

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

} 
0

Vous pouvez utiliser array_walk_recursive pour créer un nouveau tableau de noms à partir de votre fichier json existant. Effectuez les opérations suivantes:

$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); 

utilisation array_walk_recursive (articles $, array ($ this-, 'getName')); si vous utilisez un contrôleur de framework php.

0

Essayez cette

$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);