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]   

> Без описания
Deonis
Отправлено: 24 Февраля, 2012 - 09:04:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




Доброго времени суток! Простая, казалось бы, задача, но поставила в тупик Недовольство, огорчение
Собственно вот в чем дело. (упростил всё до минимума)
Есть массив двух первых уровней каталога:
PHP:
скопировать код в буфер обмена
  1. $cats = array(
  2.         array(1,0, 'cat_1'), // array(id, parent_id, 'cat_title')
  3.         array(2,1, 'cat_1.1'),
  4.         array(3,1, 'cat_1.2'),
  5.         array(4,1, 'cat_1.3'),
  6.         array(5,0, 'cat_1'),
  7.         array(6,5,'cat_2.1'),
  8.         array(7,5,'cat_2.2'),
  9.         array(8,0,'cat_3'),
  10.         array(9,8,'cat_3.1')
  11. );


Получаем массив третьего уровня каталога:
PHP:
скопировать код в буфер обмена
  1. $lvl3 = array(
  2.         array(100,4,'some_cat1'), // array(id, parent_id, 'cat_title')
  3.         array(101,9,'some_cat2')
  4. );


Задача - получить массив только первых уровней каталога отталкиваясь от значений parent_id третьего массива
Пробую делать так:
PHP:
скопировать код в буфер обмена
  1. function tree($lines){
  2.         global $cats;
  3.         $arrCats = array();
  4.         for($i = 0; $i < count($lines); $i++){
  5.                 foreach($cats as $key => $val){
  6.                         if($val[0] == $lines[$i][1]){
  7.                                 $arrCats[] = $val;
  8.                         }                      
  9.                 }
  10.         }
  11.         if($arrCats[0][1] == 0){
  12.                 print_r($arrCats); /* Это - тот самый уровень! Распечатать его можно, но вернуть этот массив не получается. */
  13.         } else {
  14.                 tree($arrCats);
  15.         }      
  16. }
  17. $firstLvl = tree($lvl3); // Вызываем рекурсивную функцию
  18.  

Как вернуть этот самый массив в переменную $firstLvl?
Буду признателен за помощь.

P.S. Сори за опечатку в названии темы, уже более 12-ти часов сижу над этой проблемой, мозг кипит.

(Отредактировано автором: 24 Февраля, 2012 - 09:09:21)

 
 Top
Okula
Отправлено: 24 Февраля, 2012 - 10:19:37
Post Id



Участник


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


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




Что значит распечатать можно, а вернуть нет? return $arrCats; и всё вернёт.
 
 Top
Deonis
Отправлено: 24 Февраля, 2012 - 10:26:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




Okula пишет:
return $arrCats; и всё вернёт.

В том то и дело, что в этот момент мы будетем в глубине рекурсивного стека. Поэтому return $arrCats; ни к чему не приведёт.
 
 Top
Dezmont
Отправлено: 24 Февраля, 2012 - 11:01:00
Post Id



Частый гость


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


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




Deonis пишет:
Okula пишет:
return $arrCats; и всё вернёт.

В том то и дело, что в этот момент мы будетем в глубине рекурсивного стека. Поэтому return $arrCats; ни к чему не приведёт.


Что-то я не понял... Ну и какая разница в какой "глубине" мы будем? return $arrCats вернёт вам всё что надо.
 
 Top
Deonis
Отправлено: 24 Февраля, 2012 - 11:04:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




Dezmont пишет:
return $arrCats вернёт вам всё что надо

Нет сил спорить. Измените print_r($arrCats); на return $arrCats; запустите скрипт и увидите - есть разница или нет - находимся мы "в какой глубине" или мы всё-таки находимся в глубине рекурсивного стека .

(Отредактировано автором: 24 Февраля, 2012 - 11:15:20)

 
 Top
DelphinPRO
Отправлено: 24 Февраля, 2012 - 11:14:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




PHP:
скопировать код в буфер обмена
  1. if($arrCats[0][1] == 0){
  2.      return $arrCats;
  3. } else {
  4.      return tree($arrCats);
  5. }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Deonis
Отправлено: 24 Февраля, 2012 - 11:19:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


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




DelphinPRO пишет:
PHP:
скопировать код в буфер обмена
  1. if($arrCats[0][1] == 0){
  2.      return $arrCats;
  3. } else {
  4.      return tree($arrCats);
  5. }


DelphinPRO, большое спасибо. Ночь без сна, а мог бы догадаться )) Тему можно закрывать.
 
 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