2010-11-05 30 views
1

我需要递归地反转具有多个子数组级别的巨大数组,并且我需要保留所有的键(其中一些是int键,有些是字符串键),可以有人请帮助我吗?也许一个例子使用array_reverse?此外,正在使用array_reverse这样做的唯一/最好的方法?PHP需要递归地反转一个数组

谢谢:)

+2

你为什么不能以相反的顺序走路? – 2010-11-05 05:55:29

+0

也许是一个功课问题? – 2010-11-05 06:08:01

+0

反正,决定走相反的顺序,但似乎太多的代码,因为我只是重复相同的20行代码每个if语句在反向命令... argg – SoLoGHoST 2010-11-05 06:35:47

回答

9

尝试这种情况:

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

感谢作品像一个魅力:) – SoLoGHoST 2010-11-05 06:34:21

+0

大声笑,okie dokie :) – SoLoGHoST 2010-11-05 06:38:56

1
递归

<?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 
) 
0

倒车原位一个巨大的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,)