2

一方向リストのような配列があります:

array(
    'data1' => <some data>,
    'next' => array(
        'data2' => <some data>,
        'next' => array(
            'data3' => <some data>,
            'next' => array(
                'data4' => <some data>,
                'next' => array(
                    'data5' => <some data>,
                    'next' => ..... etc to data n
                );
            );
        );
    );
);

逆の順序で配列内からデータを取得する必要があります。(data n, ... , data 2, data 1) 何か良い方法を知っていますか?

4

5 に答える 5

3

配列の逆を探しているのではなく、何か reverseを探しています。

逆のようなものを最初に理解することは、あなたを助けるかもしれません.

個々の要素の親が必要です。nextをトラバースする場合、親は常に前のものです。したがって、前の要素を親として追加すると、配列の最後の要素が探している要素になります。

まっすぐに聞こえます。難しい部分は、いわゆる変数のエイリアシング/参照でこれを表現することです。

'next'すべての親を追加し、配列をトラバースしながら、参照後にエントリを削除しましょう。

/* traverse the path on 'next' and keep previous to set 'parent' of current */
$walk = &$array; // start at root node
while ($walk) {

    if (isset($previous)) {
        $walk['parent'] = &$previous;
    }

    $previous = &$walk;

    $hasNext = array_key_exists('next', $walk);
    if ($hasNext) {
        $walk = &$walk['next'];
        unset($previous['next']);
    } else {
        break;
    }
}
unset($previous);

書かれているように、最後の要素には探している配列が含まれます。その最後の要素は次の$walkとおりです。

print_r($walk);

これにより(Demo):

Array
(
    [data5] => <some data5>
    [parent] => Array
        (
            [data4] => <some data4>
            [parent] => Array
                (
                    [data3] => <some data3>
                    [parent] => Array
                        (
                            [data2] => <some data2>
                            [parent] => Array
                                (
                                    [data1] => <some data1>
                                )
    ...
)

これが役に立ち、理解できることを願っています。

于 2012-10-22T09:08:04.217 に答える
0

これは内側の配列を反転しないことに注意してください。

$arr = array(
    'data1' => 'some data',
    'next' => array(
        'data2' => 'some data',
        'next' => '..... etc to data n'
    )
);
$rev = array_reverse($arr);
print_r($rev);
于 2012-10-22T08:23:26.733 に答える
0

ネイティブの逆関数を使用するか、次のようにします。

$myArray[count($myArray) - ++$index]
于 2012-10-22T08:19:38.313 に答える
0

これはどう?

http://php.net/manual/en/function.array-walk.php

http://php.net/manual/en/function.array-reverse.php

やりたいことを教えていただけると、お手伝いしやすくなります。

編集: あなたのコメントから、あなたは array_reverse 関数を探していると思います。

ここにあなたが探しているものがあります:

PHP 配列を再帰的に反転する必要がある

于 2012-10-22T08:21:34.347 に答える
-3

array_reverse(Array); を使用します。機能は、質問を解決するのに役立ちます。

于 2012-10-22T08:30:02.550 に答える