如何在嵌套的PHP关联数组中插入元素


How do I insert an element into a nested PHP Associative Array?

我读了很多关于SO的答案,但我不知道如何让它们解决我的问题。

这就是我所拥有的:

{
    "name": "My Company LLC ->",
    "children": [
        {
            "name": "District of the Stores",
            "children": [
                {
                    "name": "johnny1"
                },
                {
                    "name": "jonny2"
                }
            ]
        }, //I don't want my array to end here
        {  
            "name": "store number 10",
            "children": [
                {
                    "name": "johnny3"
                },
                {
                    "name": "jonny4"
                }
            ]
        }
    ]
}

这就是我想要的。

{
    "name": "My Company LLC ->",
    "children": [
        {
            "name": "District of the Stores",
            "children": [
                {
                    "name": "johnny1"
                },
                {
                    "name": "jonny2"
                },          
                {
                    "name": "store number 10",
                    "children": [
                        {
                            "name": "johnny3"
                        },
                        {
                            "name": "jonny4"
                        }
                    ]
                }
            ]
        }
    ]
}

以下是我尝试使用的:

$name=array('name'=>'My Company LLC ->');
$name['children']=array(array('name'=>'District of the Stores', 'children'=>array(array('name'=>'johnny1'), array('name'=>'jonny2'))));
$name['children'][]=array('name'=>'store number 10', 'children'=>array(array('name'=>'johnny3'), array('name'=>'jonny4')));
    echo '<pre>';
    echo json_encode($name, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);
    echo '</pre>';

我知道我在子数组的末尾插入了一个数组,这导致了第一个例子中的第二个数组问题,但我不知道如何将第二个子数组放回原始数组中的第一个。这是数据库中一个大列表的一部分,但我被困在这里了。我看不出我找到的SO答案在哪里可以帮助我插入第二个数组。

看起来你想要这个:

$name['children'][0]['children'][] = array(...);

这将引用根元素的第一个子元素(索引0(,然后像以前一样继续操作,将children数组添加到该元素中。

$name=array('name'=>'My Company LLC ->');
$name['children']=array(array('name'=>'District of the Stores', 'children'=>array(array('name'=>'johnny1'), array('name'=>'jonny2'), array('name'=>'store number 10', 'children'=>array(array('name'=>'johnny3'), array('name'=>'johnny4'))))));
    echo '<pre>';
echo json_encode($name, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);
echo '</pre>';

这是输出

{
    "name": "My Company LLC ->",
    "children": [
        {
            "name": "District of the Stores",
            "children": [
                {
                    "name": "johnny1"
                },
                {
                    "name": "jonny2"
                },
                {
                    "name": "store number 10",
                    "children": [
                        {
                            "name": "johnny3"
                        },
                        {
                            "name": "johnny4"
                        }
                    ]
                }
            ]
        }
    ]
}

如果你想把代码行分开,你可以做以下操作:

$name=array('name'=>'My Company LLC ->');
$name['children']=array(array('name'=>'District of the Stores', 'children'=>array(array('name'=>'johnny1'), array('name'=>'jonny2'))));
$name['children'][0]['children'][] = array('name'=>'store number 10', 'children'=>array(array('name'=>'johnny3'), array('name'=>'johnny4')));
    echo '<pre>';
echo json_encode($name, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);
echo '</pre>';

此外,通过查看数组而不是编码为json来调试这类事情可能会容易得多。这是作为数组的原始输出,它确实向您展示了正在进行的更好的操作。

$name=array('name'=>'My Company LLC ->');
$name['children']=array(array('name'=>'District of the Stores', 'children'=>array(array('name'=>'johnny1'), array('name'=>'jonny2'))));
$name['children'][]=array('name'=>'store number 10', 'children'=>array(array('name'=>'johnny3'), array('name'=>'jonny4')));
echo '<pre>';
print_r($name);
echo '</pre>';

输出为:

Array
(
    [name] => My Company LLC ->
    [children] => Array
        (
            [0] => Array
                (
                    [name] => District of the Stores
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [name] => johnny1
                                )
                            [1] => Array
                                (
                                    [name] => jonny2
                                )
                        )
                )
            [1] => Array
                (
                    [name] => store number 10
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [name] => johnny3
                                )
                            [1] => Array
                                (
                                    [name] => jonny4
                                )
                        )
                )
        )
)