-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

idID が であるかであるかに関係なく、それぞれをループしようとしています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 値 (整数) を 2 番目の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 に答える
0

$pageID => $pageOrderから を取得していませんforeach($array1...)。を取得してい$key => $valueます。$key は文字列 'id' と同じである可能性があります。この場合、$value は配列の ID 番号になります。$key は文字列 'children' と等しい場合もあります。この場合、$value は子 ID の配列になります。

于 2013-08-22T15:10:17.780 に答える