多くのレベルのサブ配列を持つ巨大な配列を再帰的に逆にする必要があり、すべてのキー (int キーと文字列キー) を保持する必要があります。誰か助けてください。おそらく、何らかの方法で array_reverse を使用した例でしょうか? また、これを行う唯一の/最良の方法はarray_reverseを使用していますか?
ありがとう :)
多くのレベルのサブ配列を持つ巨大な配列を再帰的に逆にする必要があり、すべてのキー (int キーと文字列キー) を保持する必要があります。誰か助けてください。おそらく、何らかの方法で array_reverse を使用した例でしょうか? また、これを行う唯一の/最良の方法はarray_reverseを使用していますか?
ありがとう :)
これを試して:
function array_reverse_recursive($arr) {
foreach ($arr as $key => $val) {
if (is_array($val))
$arr[$key] = array_reverse_recursive($val);
}
return array_reverse($arr);
}
再帰的に:
<?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
)
巨大なphp配列をinsituで反転します(再帰的ではありません):
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, )