Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Как перебрать многомерный массив с помошью рекурси


Автор: Mushu 21.8.2007, 17:50
У меня вопрос такой есть массив 
Код

Array
(
    [1] => Array
        (
            [engine_name_menu] => База клиентов
            [engine_mod_id] => 0
            [childNodes] => Array
                (
                    [2] => Array
                        (
                            [engine_name_menu] => Учреждение
                            [engine_mod_id] => 0
                            [childNodes] => Array
                                (
                                    [3] => Array
                                        (
                                            [engine_name_menu] => Создать новое учреждение
                                            [engine_mod_id] => 1
                                            [childNodes] => Array
                                                (
                                                )

                                        )

                                    [4] => Array
                                        (
                                            [engine_name_menu] => Создать новое учреждение (заявка)
                                            [engine_mod_id] => 7
                                            [childNodes] => Array
                                                (
                                                )

                                        )

                                    [5] => Array
                                        (
                                            [engine_name_menu] => Просмотр/редактирование базы exht;ltybq
                                            [engine_mod_id] => 2
                                            [childNodes] => Array
                                                (
                                                )

                                        )

                                    [6] => Array
                                        (
                                            [engine_name_menu] => Удаление из базы
                                            [engine_mod_id] => 9
                                            [childNodes] => Array
                                                (
                                                )

                                        )

                                    [7] => Array
                                        (
                                            [engine_name_menu] => Удаление из базы (запрос)
                                            [engine_mod_id] => 8
                                            [childNodes] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [8] => Array
                        (
                            [engine_name_menu] => Контактное лицо
                            [engine_mod_id] => 0
                            [childNodes] => Array
                                (
                                    [9] => Array
                                        (
                                            [engine_name_menu] => Созать новое контактное лицо
                                            [engine_mod_id] => 10
                                            [childNodes] => Array
                                                (
                                                )

                                        )

                                    [10] => Array
                                        (
                                            [engine_name_menu] => Просмотр/редактирование базы
                                            [engine_mod_id] => 12
                                            [childNodes] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

    [11] => Array
        (
            [engine_name_menu] => Мероприятия
            [engine_mod_id] => 0
            [childNodes] => Array
                (
                    [12] => Array
                        (
                            [engine_name_menu] => Планирование визита
                            [engine_mod_id] => 18
                            [childNodes] => Array
                                (
                                )

                        )

                    [13] => Array
                        (
                            [engine_name_menu] => Просмотр страницы планировщика
                            [engine_mod_id] => 17
                            [childNodes] => Array
                                (
                                )

                        )

                )

        )

)


Как его перебрать(пройти по всем элементом) с помошью рекурсии ? Вложенность может быть любая.
Зарание спасибо. Если можно примерр

Добавлено через 9 минут и 48 секунд
Сам массив
Код

a:2:{i:1;a:3:{s:16:"engine_name_menu";s:13:"База клиентов";s:13:"engine_mod_id";s:1:"0";s:10:"childNodes";a:2:{i:2;a:3:{s:16:"engine_name_menu";s:10:"Учреждение";s:13:"engine_mod_id";s:1:"0";s:10:"childNodes";a:5:{i:3;a:3:{s:16:"engine_name_menu";s:24:"Создать новое учреждение";s:13:"engine_mod_id";s:1:"1";s:10:"childNodes";a:0:{}}i:4;a:3:{s:16:"engine_name_menu";s:33:"Создать новое учреждение (заявка)";s:13:"engine_mod_id";s:1:"7";s:10:"childNodes";a:0:{}}i:5;a:3:{s:16:"engine_name_menu";s:39:"Просмотр/редактирование базы exht;ltybq";s:13:"engine_mod_id";s:1:"2";s:10:"childNodes";a:0:{}}i:6;a:3:{s:16:"engine_name_menu";s:16:"Удаление из базы";s:13:"engine_mod_id";s:1:"9";s:10:"childNodes";a:0:{}}i:7;a:3:{s:16:"engine_name_menu";s:25:"Удаление из базы (запрос)";s:13:"engine_mod_id";s:1:"8";s:10:"childNodes";a:0:{}}}}i:8;a:3:{s:16:"engine_name_menu";s:15:"Контактное лицо";s:13:"engine_mod_id";s:1:"0";s:10:"childNodes";a:2:{i:9;a:3:{s:16:"engine_name_menu";s:28:"Созать новое контактное лицо";s:13:"engine_mod_id";s:2:"10";s:10:"childNodes";a:0:{}}i:10;a:3:{s:16:"engine_name_menu";s:28:"Просмотр/редактирование базы";s:13:"engine_mod_id";s:2:"12";s:10:"childNodes";a:0:{}}}}}}i:11;a:3:{s:16:"engine_name_menu";s:11:"Мероприятия";s:13:"engine_mod_id";s:1:"0";s:10:"childNodes";a:2:{i:12;a:3:{s:16:"engine_name_menu";s:19:"Планирование визита";s:13:"engine_mod_id";s:2:"18";s:10:"childNodes";a:0:{}}i:13;a:3:{s:16:"engine_name_menu";s:30:"Просмотр страницы планировщика";s:13:"engine_mod_id";s:2:"17";s:10:"childNodes";a:0:{}}}}} 
  
 

Автор: -=Ustas=- 21.8.2007, 21:57
На вопрос "Как перебрать многомерный массив с помошью рекурсии" напрашивается только один ответ - "Только с помощью рекурсии" smile

Ну а если по делу, то :
Код


function view_array( &$array )  // например
{
    foreach ( $array AS $key => $value ) {
        
        if ( is_array( $value ) ) { 
            view_array( $value ); 
        } else {
            echo 'key -> '.$key.', value -> '.$value."\n";
        }
    }
}


Автор: GiV 21.8.2007, 23:16
Либо так
Код

$array = unserialize($array);

function rowPrint($item, $key)
{
    
    echo $key . "->" . $item . "\n";
}

array_walk_recursive($array, 'rowPrint');

Автор: Glip 22.8.2007, 17:51
Цитата(-=Ustas=- @  21.8.2007,  21:57 Найти цитируемый пост)
На вопрос "Как перебрать многомерный массив с помошью рекурсии" напрашивается только один ответ - "Только с помощью рекурсии" 


часто рекурсию можно преобразовать http://www.refactoring.com/catalog/replaceRecursionWithIteration.html

Автор: Mushu 28.8.2007, 18:19
Большое спасибо Всем, оч помогло.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)