0

多次元配列をトラバースすることはできますが、依存関係に関する情報も必要です。これが私がやろうとしていることです。私はこのような配列を持っています:

array(
    'top1' => 'sth',
    'top2' => array(
        'sub1' => 'sth',
        'sub2' => array(
            'line1' => 'sth',
            'line2' => 'sth'
        )
    )
    'top3' => 'sth'
)

配列をトラバースしてすべてのキーを取得できます。結果は次のとおりです。

array([0] => 'top1', [1] => 'top2', [2] => 'sub1', [3] => 'sub2', ...)

ただし、現在の要素の親を知る必要があります。だから私はこのようなものを手に入れることができるといいのですが:

array(
    [top1] => array('parent' => 0, 'id' => 1),
    [top2] => array('parent' => 0, 'id' => 2),
    [sub1] => array('parent' => 2, 'id' => 2.1),
    [sub2] => array('parent' => 2, 'id' => 2.2),
    [line1] => array('parent' => 2.2, 'id' => 2.2.1),
    ...
    [top3] => array('parent' => 0, 'id' => 3)
)

私はさまざまな方法を試してきましたが、常に正しい結果が得られるとは限りませんでした。誰かがこれを解決できますか?ありがとう!

4

1 に答える 1

1

ここにあなたのための実例があります

function traverse(array $input, $parent = null) {

    $result = array();
    $current = 1;
    foreach ($input as $key => $value) {

        $id = null !== $parent ? $parent . '.' . $current : $current;
        $result[$key] = array('parent' => null !== $parent ? $parent : 0, 'id' => $id);
        if (is_array($value)) {

            $result = array_merge($result, traverse($value, $id));
        }

        $current++;
    }

    return $result;
}

$input = array(
    'top1' => 'sth',
    'top2' => array(
        'sub1' => 'sth',
        'sub2' => array(
            'line1' => 'sth',
            'line2' => 'sth'
        )
    ),
    'top3' => 'sth'
);

echo '<pre>';
print_r($input);
echo '<hr>';
print_r(traverse($input));
echo '</pre>';
于 2012-10-03T13:35:34.463 に答える