-1

我有我的 json,我已经将它转换成一个 php 数组,这里是 print_r:

Array
(
    [0] => Array
        (
            [id] => 187
        )

    [1] => Array
        (
            [id] => 209
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 210
                        )

                    [1] => Array
                        (
                            [id] => 211
                        )

                )

        )

    [2] => Array
        (
            [id] => 188
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 196
                        )

                    [1] => Array
                        (
                            [id] => 197
                        )

                    [2] => Array
                        (
                            [id] => 198
                        )

                )

        )

    [3] => Array
        (
            [id] => 189
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 193
                        )

                )

        )

    [4] => Array
        (
            [id] => 202
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 190
                        )

                    [1] => Array
                        (
                            [id] => 191
                        )

                    [2] => Array
                        (
                            [id] => 206
                        )

                    [3] => Array
                        (
                            [id] => 192
                        )

                )

        )

    [5] => Array
        (
            [id] => 203
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 204
                        )

                    [1] => Array
                        (
                            [id] => 205
                        )

                    [2] => Array
                        (
                            [id] => 207
                        )

                    [3] => Array
                        (
                            [id] => 208
                        )

                )

        )

    [6] => Array
        (
            [id] => 194
        )

)

我现在想将该数组转换为最终可以更新数据库的列表。但我不知道如何做子数组:

到目前为止,我有:

$arrayList = json_decode(stripslashes($_POST['nestable-output']), true);

foreach ($arrayList as $array1){
    foreach ($array1 as $pageID => $pageOrder){
        echo $pageID . "-" . $pageOrder . "<br/>";
        //foreach ($pageOrder as $pageID2 => $pageOrder2){
        //  echo $pageID2 . "-" . $pageOrder2 . "<br/>";
        //}
    }
}

我知道评论部分是不正确的,因为它给了我一个“提供的参数无效”,但是谁能告诉我这里的正确方法是什么?

这是我当前的输出,没有注释部分:

id-187
id-209
children-Array
id-188
children-Array
id-189
children-Array
id-202
children-Array
id-203
children-Array
id-194
4

4 回答 4

0

据我了解,您希望从多维数组中获取字符串。尝试这样的事情:

$arrayList = json_decode(stripslashes($_POST['nestable-output']), true);

$list = trim(array_walk($arrayList, 'get_ids'), ',');

function get_ids($array_list) {
    $list = '';

    foreach($array_list as $key => $value) {
        if('children' == $key) $list .= get_ids($value)
        else {
            foreach($value as $index => $id) $list .= $id . ', ';
        }
    }

    return $list;
}

请注意,即使您的数组深度超过 2 层,这也应该有效。

于 2013-08-22T15:17:20.657 回答
0

你没有$pageID => $pageOrderforeach($array1...). 你得到一个$key => $value. 您的 $key 可能等于字符串 'id',在这种情况下,$value 将是数组中的 id 号。您的 $key 也可以等于字符串 'children',在这种情况下,$value 将是您的子 ID 数组。

于 2013-08-22T15:10:17.780 回答
0

您正在尝试遍历每个,无论 id 是id还是children. 由于键为数字时的值id是数字,而不是数组,因此在尝试作为 foreach 运行时会失败。相反,只有当你知道它是一个数组时才循环(strcmp 发挥作用):

$arrayList = json_decode(stripslashes($_POST['nestable-output']), true);

foreach ($arrayList as $array1){
    foreach ($array1 as $pageID => $pageOrder){
        echo $pageID . "-" . $pageOrder . "<br/>";
        if(strcmp("children", $pageID) == 0)) {
            foreach ($pageOrder as $pageID2 => $pageOrder2){
              echo $pageID2 . "-" . $pageOrder2 . "<br/>";
            }
        }
    }
}
于 2013-08-22T15:06:17.383 回答
0

您收到“无效参数”错误,因为您试图将 ID 值(它是一个整数)传递给您的第二个foreach构造。

尝试修改您的代码以读取:

$arrayList = json_decode(stripslashes($_POST['nestable-output']), true);

foreach ($arrayList as $array1){
    foreach ($array1 as $pageID => $pageOrder){
        echo $pageID . "-" . $pageOrder . "<br/>";
        if($pageID == 'children') {
            foreach ($pageOrder as $pageID2 => $pageOrder2){
              echo $pageID2 . "-" . $pageOrder2 . "<br/>";
            }
        }
    }
}
于 2013-08-22T15:06:50.133 回答