我正在研究如何在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)}
答案 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
)