如何将元素插入嵌套的PHP关联数组?

时间:2015-09-03 21:27:44

标签: php arrays

我已经阅读了很多关于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>';

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

2 个答案:

答案 0 :(得分:2)

看起来你想要这个:

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

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

答案 1 :(得分:1)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">

  <div class="row">

    <div class="tile">
      <div class="text">01</div>
    </div>

    <div class="tile">
      <div class="text">02</div>
    </div>

    <div class="tile">
      <div class="text dolphin">03</div>
    </div>

    <div class="tile">
      <div class="text">04</div>
    </div>

    <div class="tile">
      <div class="text">05</div>
    </div>

    <div class="tile">
      <div class="text dolphin">06</div>
    </div>

    <div class="tile">
      <div class="text">07</div>
    </div>

    <div class="tile">
      <div class="text dolphin">08</div>
    </div>

    <div class="tile">
      <div class="text">09</div>
    </div>

    <div class="tile">
      <div class="text">10</div>
    </div>

    <div class="tile">
      <div class="text">11</div>
    </div>

    <div class="tile">
      <div class="text">12</div>
    </div>

  </div><!-- end .row -->

  <button type="button" class="hide-divs">HIDE DIVS 3, 6 &amp; 8</button>

这是输出

$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"
                        }
                    ]
                }
            ]
        }
    ]
}

此外,通过查看数组而不是编码为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'][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>';

输出是:

$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>';