Я пытаюсь найти наилучший способ высушить цикл foreach. Мне нужен цикл, чтобы добавить узел в массив дерева, только если у него есть дочерние элементы.
$categories = Category::all();
$nodes = $categories->toTree();
$tree[] = [
'id' => null,
'name' => '--No Parent--'
];
foreach ( $nodes as $node ) {
$tree[] = [
'id' => $node->id,
'name' => $node->name
];
foreach ( $node->children as $node2 ) {
$tree[] = [
'id' => $node2->id,
'name' => $node->name.' > '. $node2->name
];
}
}
Выглядит как простой if
что проверки для этого условия будут работать для вас.
$categories = Category::all();
$nodes = $categories->toTree();
$tree[] = [
'id' => null,
'name' => '--No Parent--'
];
foreach ( $nodes as $node ) {
if ( is_array($node->children) && count($node->children) > 0 ) {
$tree[] = [
'id' => $node->id,
'name' => $node->name
];
foreach ( $node->children as $node2 ) {
$tree[] = [
'id' => $node2->id,
'name' => $node->name.' > '. $node2->name
];
}
}
}
Других решений пока нет …