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);

这给了你(演示):

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

使用本机反向函数,或者:

$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 回答
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 回答
-3

使用 array_reverse(Array); 功能它可能有助于解决问题。

于 2012-10-22T08:30:02.550 回答