Эта тема на forum.dklab.ru


Roksar: Создание "зеркала" многомерного массива
Требуется перевернуть вложенность массива например:
role3 =>
role2 =>
role1 = null

в
role1 =>
role2 =>
role3 = null
Вроде бы простая задачка но голову уже сломал)) Помогите пожалуйста)
Миша Спларов:
foreach?
Anonymous:
foreach?
Ну да, и здесь нужна рекурсивная функция... проблема в том что надо достать сначала самый глубокий элемент и от него идти выше..
Юрий Насретдинов:
Здесь ни рекурсивных функций, ни foreach не нужно.

Достаточно что-то наподобие следующего:


<?
$arr = array( 'key1' => array( 'key2' => array( 'key3' => 12345 ) ) );

$keys = array();
$ln = &$arr;

while(true)
{
if(!is_array($ln)) break;
list($key) = array_keys($ln);
$keys[] = $key;
$ln = &$ln[$key]; // не факт, что так будет работать
}

$keys = array_reverse($keys);

$new_arr = array();
$ln = &$new_arr;

foreach($keys as $key)
{
$ln[$key] = array();
$ln = &$ln[$key];
}



Не факт, что будет работать: если не бкдет (в месте с $ln ...), то тогда надо единственную переменную-ссылку $ln заменить на массив ссылок, и обращаться всегда к последнему элементу (а при присвоении значения ссылки соответственно добавлять ее в конец этого самого массива).
dimagolov:
задача еще имеет очень ограниченное множество входящих данных. так как массив это дерево, а перевернуть можно только одну ветку.

Эта тема на forum.dklab.ru