PHP нужно рекурсивно перевернуть массив - PullRequest
2 голосов
/ 05 ноября 2010

Мне нужно рекурсивно инвертировать массив HUGE, который имеет много уровней подмассивов, и мне нужно сохранить все ключи (некоторые из которых являются ключами типа int, а некоторые являются ключами строки), может кто-нибудь помочь мне?Возможно, пример использования array_reverse как-то?Кроме того, использование array_reverse единственный / лучший способ сделать это?

Спасибо:)

Ответы [ 3 ]

11 голосов
/ 05 ноября 2010

Попробуйте это:

function array_reverse_recursive($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val))
            $arr[$key] = array_reverse_recursive($val);
    }
    return array_reverse($arr);
}
1 голос
/ 05 ноября 2010

Рекурсивно:

<?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 голосов
/ 20 июня 2012

Обращение огромного 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, )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...