Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как переписать функцию в рекурсивную

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
hiddensy
Отправлено: 29 Октября, 2014 - 13:10:14
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Всем привет.
есть такой код
PHP:
скопировать код в буфер обмена
  1.  
  2.     $array = array("эксперт", "эксперт авто Москва", "эксперт волос отзывы", "эксперт волос эвалар отзывы", "эксперт журнал", "эксперт интернет магазин", "эксперт медицинский центр", "эксперт работа", "эксперт по ДТП");
  3.     foreach($array as $row){
  4.             $current=&$tree;
  5.             $keywords=explode(' ',$row);  
  6.             foreach($keywords as $key=>$word){
  7.                     if($key<count($keywords)-1) $current=&$current[$word];
  8.                     elseif($key!=0) $current=&$current[$word];
  9.             }
  10.     }
  11.    
  12.     echo("<pre>");
  13.     print_r($tree);  
  14.     echo("</pre>");
  15.    
  16.     print '<pre>';
  17.     print_r(perebor($tree));
  18.     print '</pre>';
  19.    
  20.     function perebor($array1 = array()){
  21.         foreach($array1 as $key1=>$value){  
  22.             $array2[] =  $key1;
  23.             foreach($array1[$key1] as $key2=>$value){
  24.                 $array2[] =  $key1." ".$key2;
  25.                 foreach($array1[$key1][$key2] as $key3=>$value){
  26.                     $array2[] =  $key1." ".$key2." ".$key3;
  27.                     foreach($array1[$key1][$key2][$key3] as $key4=>$value){
  28.                         $array2[] =  $key1." ".$key2." ".$key3." ".$key4;
  29.                     }
  30.                 }
  31.             }
  32.                
  33.         }
  34.         return $array2;
  35.     }
  36.  


Как переписать функцию function perebor($array1 = array()), сделав её рекурсивной, но что-бы результат выдаваемый ей был аналогичен?

Подскажите пожалуйста кто силен в рекурсиях.
 
 Top
Panoptik
Отправлено: 29 Октября, 2014 - 13:18:44
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




а мне нравится ваш код, добавьте туда еще парочку вложенных форичей
(Добавление)
какой хоть результат выводится?


-----
Just do it
 
 Top
hiddensy
Отправлено: 29 Октября, 2014 - 13:25:04
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Panoptik пишет:
какой хоть результат выводится?


PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => эксперт
  3.     [1] => эксперт авто
  4.     [2] => эксперт авто Москва
  5.     [3] => эксперт волос
  6.     [4] => эксперт волос отзывы
  7.     [5] => эксперт волос эвалар
  8.     [6] => эксперт волос эвалар отзывы
  9.     [7] => эксперт журнал
  10.     [8] => эксперт интернет
  11.     [9] => эксперт интернет магазин
  12.     [10] => эксперт медицинский
  13.     [11] => эксперт медицинский центр
  14.     [12] => эксперт работа
  15.     [13] => эксперт по
  16.     [14] => эксперт по ДТП
  17. )
 
 Top
Panoptik
Отправлено: 29 Октября, 2014 - 13:32:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




PHP:
скопировать код в буфер обмена
  1. function perebor($arr, $prefix = '') {
  2.     $result = array();
  3.     $prefix .= $prefix ? ' ' : '';
  4.     foreach($arr as $key => $val) {
  5.         $result[] = $prefix . $key;
  6.         if(is_array($val)) {
  7.             $result = array_merge($result, perebor($val, $prefix . $key));
  8.         }
  9.     }
  10.     return $result;
  11. }

(Отредактировано автором: 29 Октября, 2014 - 13:33:58)



-----
Just do it
 
 Top
hiddensy
Отправлено: 29 Октября, 2014 - 13:35:32
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Panoptik пишет:
PHP:
скопировать код в буфер обмена
  1. function perebor($arr, $prefix = '') {
  2.     $result = array();
  3.     $prefix .= $prefix ? ' ' : '';
  4.     foreach($arr as $key => $val) {
  5.         $result[] = $prefix . $key;
  6.         if(is_array($val)) {
  7.             $result = array_merge($result, perebor($val, $prefix . $key));
  8.         }
  9.     }
  10.     return $result;
  11. }


Спасибо огромное, выручили.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB