【问题标题】:PHP Need to recursively reverse an arrayPHP需要递归反转一个数组
【发布时间】:2010-11-05 05:50:01
【问题描述】:

我需要递归地反转一个具有许多级别子数组的 HUGE 数组,并且我需要保留所有键(其中一些是 int 键,有些是字符串键),有人可以帮我吗?也许以某种方式使用 array_reverse 的示例?另外,使用 array_reverse 是唯一/最好的方法吗?

谢谢:)

【问题讨论】:

  • 有什么理由不能逆序走?
  • 无论如何,决定以相反的顺序进行,但似乎代码太多,因为我只是为 REVERSE ORDER 中的每个 if 语句重复相同的 20 行代码... argg

标签: php arrays array-reverse


【解决方案1】:

试试这个:

function array_reverse_recursive($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val))
            $arr[$key] = array_reverse_recursive($val);
    }
    return array_reverse($arr);
}

【讨论】:

    【解决方案2】:

    递归:

    <?php
    
    $a = array(1,3,5,7,9);
    
    print_r($a);
    
    function rev($a) {
      if (count($a) == 1)
        return $a;
    
      return array_merge(rev(array_slice($a, 1, count($a) - 1)), array_slice($a, 0, 1));
    }
    
    $a = rev($a);
    print_r($a);
    
    ?>
    

    输出:

    Array
    (
        [0] => 1
        [1] => 3
        [2] => 5
        [3] => 7
        [4] => 9
    )
    Array
    (
        [0] => 9
        [1] => 7
        [2] => 5
        [3] => 3
        [4] => 1
    )
    

    【讨论】:

      【解决方案3】:

      原位反转一个巨大的 php 数组(但不是递归):

      function arrayReverse(&$arr){
        if (!is_array($arr) || empty($arr)) {
          return;
        }
        $rev = array();
        while ( false !== ( $val = end($arr) ) ){
          $rev[ key($arr) ] = $val;
          unset( $arr[ key($arr) ] );
        }
        $arr = $rev;
      }
      //usage
      $test = array(5, 'c'=>100, 10, 15, 20);
      arrayReverse($test);
      var_export($test);
      // result: array ( 3 => 20, 2 => 15, 1 => 10, 'c' => 100, 0 => 5, )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-13
        • 1970-01-01
        • 2012-10-20
        • 2019-07-25
        • 1970-01-01
        • 2011-04-19
        • 2021-12-16
        • 2014-04-03
        相关资源
        最近更新 更多