代码之家  ›  专栏  ›  技术社区  ›  SoLoGHoST

PHP需要递归地反转数组

  •  2
  • SoLoGHoST  · 技术社区  · 14 年前

    谢谢:)

    3 回复  |  直到 14 年前
        1
  •  11
  •   Jacob Relkin    14 年前

    试试这个:

    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
  •  1
  •   nonopolarity    14 年前

    递归地:

    <?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
  •  0
  •   Stano    13 年前

    原地反转一个巨大的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, )
    
    推荐文章