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]   

> Без описания
dimajak
Отправлено: 23 Ноября, 2009 - 23:35:42
Post Id


Новичок


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


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




Имеем:
таблицу 'elements' в БД с полями id, id_parent, caption
id - элемент дерева, id_parent - id родителя элемента, caption - наименование элемента.
Необходимо:
создать ассоциативный массив $arr[] с полями 'id', 'id_parent', 'caption'
чтобы обращаться к элементу массива по 'id' - $arr["119"]['caption'] и получить название 119-го элемента массива.
Я так понимаю, что здесь без рекурсии не обойтись, только вот запутался совсем, уже второй день сижу.
PHP:
скопировать код в буфер обмена
  1. function structure_array($db, $id_parent=0, $level=0) {
  2.     $st = array();
  3.     $result = get_mysql_query($db, "SELECT * FROM `elements` WHERE `id_parent` = $id_parent;");
  4.     if (mysql_num_rows($result) <> 0)
  5.     {
  6.       while ($row = mysql_fetch_array($result))
  7.       {
  8.         $st[]=$row["id"];
  9.         $st2=structure_array($db, $row["id"], $level + 1);
  10.         foreach ($st2 as $key => $value) {
  11.           $st[]=$key;
  12.         }
  13.       }
  14.     }
  15.     mysql_free_result($result);
  16.     return($st);
  17. }

(Отредактировано автором: 23 Ноября, 2009 - 23:36:12)

 
 Top
JustUserR
Отправлено: 24 Ноября, 2009 - 00:32:23
Post Id



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


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


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




dimajak Честно сказать не до конца понятно что вы хотите но помоему перменная $level как минимум нигде не используется (Она прибавляется на единицу но далее нигде не используется)
И наверное массив должен генерироваться автоматически типа как с помощью []


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Viper
Отправлено: 24 Ноября, 2009 - 08:01:29
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




CODE (text):
скопировать код в буфер обмена
  1. array
  2. ("id" =>
  3.         array
  4.         (
  5.                 "id_parent" => "caption",
  6.                 ...
  7.         )
  8. )


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
valenok Модератор
Отправлено: 24 Ноября, 2009 - 08:27:46
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




while($row = mysql_fetch_assoc()) $out[$row['id']] = $row;
echo $out[19]['caption'];


-----
Truly yours, Sasha.
 
My status
 Top
dimajak
Отправлено: 24 Ноября, 2009 - 10:20:11
Post Id


Новичок


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


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




valenok, так родители только вносятся.

уточню вопрос темы: Как добавить в массив с данными данные, возвращаемые функцией в виде массива?

(Отредактировано автором: 24 Ноября, 2009 - 12:52:01)

 
 Top
Viper
Отправлено: 24 Ноября, 2009 - 14:14:43
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




хм... вроде эта функция должна помочь http://ua2.php.net/manual/en/fun...ge-recursive.php


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
dimajak
Отправлено: 24 Ноября, 2009 - 15:57:12
Post Id


Новичок


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


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




array_merge_recursive(), как и array_merge() перенумеровывают числовые индексы, а у меня как раз такие. Помог простой + Радость
всем спасибо!
 
 Top
JustUserR
Отправлено: 24 Ноября, 2009 - 16:52:46
Post Id



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


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


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




dimajak пишет:
Помог простой +
Да в PHP есть достаточно большие залежи функций для разных целей - в том числе для линейного решения рекурсивных задач (Шаг рекурсии обрабатывается самой встроенной функцией)
Хотя надо не забывать про кросс-совместимость - так как определенные функции есть не во всех версиях PHP (Не идеальна совместимости PHP4 и 5)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB