【问题标题】:DRY foreach loop with dynamic variable具有动态变量的 DRY foreach 循环
【发布时间】:2016-04-14 02:06:51
【问题描述】:

我正在尝试找出 DRY 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
        ];

    }
}

【问题讨论】:

    标签: php nested-loops nested-sets


    【解决方案1】:

    看起来像一个简单的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
                ];
    
            }
        }
    }
    

    【讨论】:

    • 这对我不起作用,因为我需要它来重申 foreach。另请注意,第二个 foreach 有一个变量 $node2
    • 你能告诉我 $nodes 可能是什么样子吗?做一个var_dump?我无法准确理解您想要什么。如果您可以显示 $nodes 数组的简化版本,然后您希望它显示什么,这将有助于我理解。
    • $nodes 变量包含类别模型的集合。集合 {#795 ▼ #items: array:91 [▼ 0 => 类别 {#798 ▶}
    • 如果碰巧有子关系,我只想重复foreach
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多