在SQL循环中,如何修改子数组?

时间:2019-05-15 16:15:50

标签: php json

我正在尝试将SQL循环中的数据添加到数组的特定部分,但是当我执行json编码时,它似乎并没有保持数组格式。

我创建数组:

$array['type'] = 'update';
$array['tags']['data'] = array(array('name' => "Tag", 'tags' => array()));

然后在while的sql循环中:

$array['tags']['data']['tags'][] = array('a' => "$row[a]", 'b' => "$row[b]");

此循环后,json编码:

json_encode($array);

在输出中,“标签”在数据下添加了行,而我为该数组设置的行现在在tag:data:0:tags下,并且尚未填充该行。

data也从[ ]变成了{ },我需要成为[{ }]。如果我退出循环,则数据部分位于[ { } ]所在的位置。

希望如此!如果没有,可以扩展更多。

非常感谢

1 个答案:

答案 0 :(得分:0)

您在datatags之间有一个额外的数组

$array['tags']['data'] = array(array('name' => "Tag", 'tags' => array()));
print_r($array);

输出

Array
(
    [tags] => Array
        (
            [data] => Array
                (
                    [0] => Array
                        (
                            [name] => Tag
                            [tags] => Array
                                (
                                )

                        )

                )

        )

)

然后您尝试访问(用于分配)

$array['tags']['data']['tags'][] = array('a' => "$row[a]", 'b' => "$row[b]");

您的$array实际应该是

$array['tags']['data'][0]['tags'][]

或者类似的东西...

没有更多的事情要做,这是我所能做的最好的事情,但这确实不能给答案打分,但是没有办法说明在注释中嵌套太多的数组。

您将得到的是这样的东西:

Array
(
    [tags] => Array
        (
            [data] => Array
                (
                    [0] => Array
                        (
                            [name] => Tag
                            [tags] => Array
                                (
                                )

                        ),
                    [tags] => Array
                       (
                           [0] => Array
                           (
                              a => "$row[a]",
                              b => "$row[b]"
                           )
                          [1] => Array(...)
                       )

                )

        )

)

由于['data' => [0 => ['name'=>'Tag',...], 'tags' => [...]]混合密钥,将在该位置{data : {0:{name:"Tag",...},tags:[]}}给您一个JSON对象

P.S这真的让我很烦"$row[a]"-我不知道为什么,但是... ...大声笑