У меня есть массив, похожий на один путь:
array( 'data1' => <some data>, 'next' => array( 'data2' => <some data>, 'next' => array( 'data3' => <some data>, 'next' => array( 'data4' => <some data>, 'next' => array( 'data5' => <some data>, 'next' => ..... etc to data n ); ); ); ); );
Мне нужно получить данные изнутри массивов в обратном порядке. (данные n, …, данные 2, данные 1) Знаете ли вы хороший метод для этого?
Вы не ищете обратную сторону массива, но вы ищете что-то обратное .
Лучшее понимание первого рода обратного может помочь вам.
Вам нужен родительский элемент каждого отдельного элемента. Родитель всегда является предыдущим, если вы переходите дальше . Поэтому, если вы добавите предыдущий в качестве родителя, то последний элемент массива – тот, который вы ищете.
Так звучит прямо. Сложнее всего выразить это с помощью так называемых переменных aliasing / reference.
Давайте добавим всех родителей и, пройдя по массиву, удалим 'next'
запись после ссылки на нее:
/* traverse the path on 'next' and keep previous to set 'parent' of current */ $walk = &$array; // start at root node while ($walk) { if (isset($previous)) { $walk['parent'] = &$previous; } $previous = &$walk; $hasNext = array_key_exists('next', $walk); if ($hasNext) { $walk = &$walk['next']; unset($previous['next']); } else { break; } } unset($previous);
с/* traverse the path on 'next' and keep previous to set 'parent' of current */ $walk = &$array; // start at root node while ($walk) { if (isset($previous)) { $walk['parent'] = &$previous; } $previous = &$walk; $hasNext = array_key_exists('next', $walk); if ($hasNext) { $walk = &$walk['next']; unset($previous['next']); } else { break; } } unset($previous);
Как записано, последний элемент будет содержать массив, который вы ищете. Этот последний элемент $walk
здесь:
print_r($walk);
Что дает вам ( демо ):
Array ( [data5] => <some data5> [parent] => Array ( [data4] => <some data4> [parent] => Array ( [data3] => <some data3> [parent] => Array ( [data2] => <some data2> [parent] => Array ( [data1] => <some data1> ) ... )
Надеюсь, это полезно и понятно.
Используйте собственные обратные функции или:
$myArray[count($myArray) - ++$index]
как насчет этого?
http://php.net/manual/en/function.array-walk.php
http://php.net/manual/en/function.array-reverse.php
Если вы можете сказать нам, что вы хотите сделать, нам будет легче помочь вам.
EDIT: Из вашего комментария я считаю, что вы смотрите на функцию array_reverse.
Вот что вы ищете:
PHP Необходимо рекурсивное изменение массива
обратите внимание, что это не изменит внутренний массив.
$arr = array( 'data1' => 'some data', 'next' => array( 'data2' => 'some data', 'next' => '..... etc to data n' ) ); $rev = array_reverse($arr); print_r($rev);
используйте array_reverse (Array); функция может помочь решить вопрос.