【问题标题】:Getting data from one way array in reverse order以相反的顺序从单向数组中获取数据
【发布时间】:2012-10-12 00:34:06
【问题描述】:

我有一个类似单向列表的数组:

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) 你知道有什么好的方法吗?

【问题讨论】:

  • 给出期望输出的例子...reverse可以是排序、翻转或回溯
  • 我只需要从这个数组结构中反向获取数据:"data n" -> "data n-1" -> .... -> "data1"
  • 它仍然不清楚......使用上面的数组示例编辑您的 qurstion 并使用您使用的所有键添加最终所需的输出,data1,next,data2,next 等
  • 添加您的预期输出,这将解决混乱。
  • 请看一下这个数组。它就像一棵只有一根树枝的树。我想从最后一片叶子中获取数据并继续到根目录

标签: php arrays


【解决方案1】:

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

$myArray[count($myArray) - ++$index]

【讨论】:

    【解决方案2】:

    这个怎么样?

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

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

    如果您能告诉我们您想做什么,我们会更容易为您提供帮助。

    编辑:根据您的评论,我相信您正在寻找 array_reverse 函数。

    这是您要查找的内容:

    PHP Need to recursively reverse an array

    【讨论】:

      【解决方案3】:

      请注意,这不会反转内部数组。

      $arr = array(
          'data1' => 'some data',
          'next' => array(
              'data2' => 'some data',
              'next' => '..... etc to data n'
          )
      );
      $rev = array_reverse($arr);
      print_r($rev);
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          您不是在寻找数组的反面,而是在寻找 一些相反的东西

          首先更好地理解这种反向可能会对您有所帮助。

          您需要每个单独元素的父级。如果您在 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);
          

          正如所写的那样,last 元素将包含您要查找的数组。最后一个元素是$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>
                                          )
              ...
          )
          

          希望这是有帮助且易于理解的。

          【讨论】:

          • 你节省了我很多时间@hakre!这就是我需要的!非常非常感谢!
          • @JohnGrey:你的问题一开始就不是很清楚。我第一次发表评论时没有看到编辑。注意提出具体的问题,并在接下来的问题中明确你的问题是什么。一个好问题已经包含它的答案;)
          猜你喜欢
          • 2022-01-06
          • 2012-11-29
          • 1970-01-01
          • 1970-01-01
          • 2021-10-05
          • 1970-01-01
          • 2014-07-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多