递归地从另一个数组创建一个数组

时间:2016-01-20 16:58:54

标签: php arrays multidimensional-array iterator spl

我正在尝试使多维数组构建一个添加hr字段的数组路径,使其看起来像这样:

我只是无法弄清楚如何添加总数,也无法创建子数组,因此选项中的点符号也是如此。 我的目标是获得类似的内容

      [1] => [1][2][1][5][0][6] = 35 (the second child path "1")
      [1] => [1][2][1][5][0][7] = 25 

或类似的内容:

   array (
      [children.0.children.0.children.0.total] = 20
      [children.0.children.1.children.1.total] = 35
      // etc
   )

复杂的部分是它向不同的方向发展,我想知道基于路径的最高和最低总数是多少:

==> Run Code Here或复制/粘贴

// -------------
// The Flattener
// -------------
function doit($myArray) {

    $iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray));
    $result = array();
    foreach ($iter as $leafKey => $leafValue) {
        $keys = array();
        foreach (range(0, $iter->getDepth()) as $depth) {
            $keys[] = $iter->getSubIterator($depth)->key();
        }
        $result[ join('.', $keys) ] = $leafValue;
    }

    return $result;
}

// -------------
// Example Tree
// -------------
$tree = [
    'id' => 1,
    'type' => 'note',
    'data' => [],
    'children' => [
        [
            'id' => 2,
            'type' => 'wait',
            'data' => [
                'hr' => 10,
            ],
            'children' => [
                [
                    'id' => 3,
                    'type' => 'wait',
                    'data' => [
                        'hr' => 10,
                    ],
                    'children' => [
                        'id' => 4,
                        'type' => 'exit',
                        'data' => [],
                        'children' => []
                    ]
                ],
                [
                    'id' => 5,
                    'type' => 'note',
                    'data' => [
                        'hr' => 10,
                    ],
                    'children' => [
                        [
                            'id' => 6,
                            'type' => 'wait',
                            'data' => [
                                'hr' => 10,
                            ],
                            'children' => []
                        ],
                        [
                            'id' => 7,
                            'type' => 'exit',
                            'data' => [],
                            'children' => []
                        ],

                    ]
                ]
            ],
        ]
    ]
];    

$result = doit($tree);

print_r($result);

1 个答案:

答案 0 :(得分:0)

这似乎有效,我发现它整天都在谷歌搜索。

mydict = {"Pens": 1, "Pencils": 2, "Paper": 3}
with open('myfile.json' , 'r+') as f:
   d = json.load(f)
   d.update(mydict)
   f.seek(0)
   json.dump(d, f)