反向多维数组没有任何排序方法在php


Reverse multidimensional array without any sort method in php

我正在学习如何在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)}

就像这样做(如果你严格要求不使用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 ) 

最简单的方法是使用array_reverse(用于您的2d数组):

$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和更多维度的数组,你需要一个递归函数

使用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
)