【问题标题】:Nesting Array Items Based on a Value基于值嵌套数组项
【发布时间】:2017-07-20 18:25:39
【问题描述】:

我有一个这样的数组:

0 => ['id'=> 1, 'name' => 'A', 'parent_id' => null],
1 => ['id'=> 2, 'name' => 'A', 'parent_id' => 1],
2 => ['id'=> 3, 'name' => 'A', 'parent_id' => 2],
3 => ['id'=> 4, 'name' => 'A', 'parent_id' => 2],
4 => ['id'=> 5, 'name' => 'A', 'parent_id' => 4]

我如何迭代它以创建一个嵌套数组,其中项目根据它们的 parent_id 在彼此内部?


结果看起来像这样:

0 => ['id'=> 1, 'name' => 'A', 'parent_id' => null, 'children' => [['id'=> 2, 'name' => 'A', 'parent_id' => 1, 'children' => [['id'=> 3, 'name' => 'A', 'parent_id' => 2], ['id'=> 4, 'name' => 'A', 'parent_id' => 2, 'children' => [['id'=> 4, 'name' => 'A', 'parent_id' => 4]]]]]]]

【问题讨论】:

标签: php arrays laravel laravel-4


【解决方案1】:

编辑:我以其他方式理解了这个问题(父母依附于孩子)......

您必须遍历用户以查找每个父/子配对。

<?php
$users = [
0 => ['id'=> 1, 'name' => 'A', 'parent_id' => null],
1 => ['id'=> 2, 'name' => 'B', 'parent_id' => 1],
2 => ['id'=> 3, 'name' => 'C', 'parent_id' => 2],
3 => ['id'=> 4, 'name' => 'D', 'parent_id' => 2],
3 => ['id'=> 4, 'name' => 'E', 'parent_id' => 4]
];

foreach($users as $user){
    foreach($users as &$parent){
        if($user['parent_id'] == $parent['id']){
            $parent['children'][] = $user;
        }
    }
}

var_dump($users);

?>

【讨论】:

    【解决方案2】:

    使用递归函数:

    $arr = array(
    0 => ['id'=> 1, 'name' => 'A', 'parent_id' => null],
    1 => ['id'=> 2, 'name' => 'A', 'parent_id' => 1],
    2 => ['id'=> 3, 'name' => 'A', 'parent_id' => 1],
    3 => ['id'=> 4, 'name' => 'A', 'parent_id' => 2],
    );
    
    function add_childs(array $elements, $parentId = null) {
        $parent = array();
    
        foreach ($elements as $element) {
            if ($element['parent_id'] == $parentId) {
              echo "in if".$element['id']."<br>";
                $children = add_childs($elements, $element['id']);
                if ($children) {
                    $element['children'] = $children;
                }
                $parent[] = $element;
            }
        }
    
        return $parent;
    }
    
    $result = add_childs($arr);
    print_r($result);
    

    示例:https://eval.in/745350

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 2016-11-17
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 2019-05-22
      相关资源
      最近更新 更多