在PHP中没有任何排序方法的反向多维数组

时间:2015-10-14 12:17:57

标签: php arrays multidimensional-array

我正在研究如何在PHP中操作数组。现在,我有一个关于多维数组的问题。我想在没有任何排序方法的情况下反转2d数组。这个问题不允许我们使用array_reverse。

$numArray = array(1,2,3,array(4,5,6),7);

function numReverse($num) {
$reverseArray=array();
$subValueArr=array();

for($count=count($num), $i=$count-1; $i >= 0; $i--){
$reverseArray[]=$num[$i];
}
foreach($num as $value){
If(is_array($value)){
for($subCount=count($value),$j=$subCount-1; $j--){
$subValueArr[]=$value[$j];
}
}
}
$reverseArray[1][]=$subValueArr;
return $reverseArray;
}

$result=numReverse($numArray);
print_r($result);

我期待这个输出

array{int(7),array{int(6),int(5),int(4)},int(3),int(2),int(1)}

3 个答案:

答案 0 :(得分:2)

就这样做,(如果你不使用array_reverse那么严格)

<?php
$numArray = array(1,2,3,array(4,5,6),7);
$result=reverse($numArray);
print_r($result);
function reverse($arr)
{
end($arr);
 do
 {
     if(is_array(current($arr)))
         $result[]=reverse(current($arr));
     else
         $result[]=current($arr);
 }while(prev($arr));
return $result;
}  
?>

<强>输出

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

答案 1 :(得分:1)

最简单的方法是使用array_reverse(对于你的二维数组):

$numArray = array(1,2,3,array(4,5,6),7);
foreach ($numArray as &$ar) {
    if (is_array($ar))
        $ar = array_reverse($ar);
}
$result = array_reverse($numArray);
var_dump($result);

对于3D和更多的dimesnions数组,你需要一个递归函数。

答案 2 :(得分:0)

使用array_walk,您将遍历每个数组的元素,传递自定义回调(在这种情况下,检查它们是否包含数组)。如果是,则该值接收array_reverse的结果,该值以相反的顺序给出数组(如果要保持密钥关联,则在值之后设置true

<?php
$numArray = array(1,2,3,array(4,5,6),7);
array_walk($numArray, function(&$v) {
    return !is_array($v) ? : $v = array_reverse($v);
});

输出(array_walk之前和之后)

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

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

    [4] => 7
)