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
Форумы портала PHP.SU :: Версия для печати :: Заполнить ассоциативный массив в рекурсивной функции
Форумы портала PHP.SU » PHP » Программирование на PHP » Заполнить ассоциативный массив в рекурсивной функции

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

1. dimajak - 23 Ноября, 2009 - 23:35:42 - перейти к сообщению
Имеем:
таблицу '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. }
2. JustUserR - 24 Ноября, 2009 - 00:32:23 - перейти к сообщению
dimajak Честно сказать не до конца понятно что вы хотите но помоему перменная $level как минимум нигде не используется (Она прибавляется на единицу но далее нигде не используется)
И наверное массив должен генерироваться автоматически типа как с помощью []
3. Viper - 24 Ноября, 2009 - 08:01:29 - перейти к сообщению
CODE (text):
скопировать код в буфер обмена
  1. array
  2. ("id" =>
  3.         array
  4.         (
  5.                 "id_parent" => "caption",
  6.                 ...
  7.         )
  8. )
4. valenok - 24 Ноября, 2009 - 08:27:46 - перейти к сообщению
while($row = mysql_fetch_assoc()) $out[$row['id']] = $row;
echo $out[19]['caption'];
5. dimajak - 24 Ноября, 2009 - 10:20:11 - перейти к сообщению
valenok, так родители только вносятся.

уточню вопрос темы: Как добавить в массив с данными данные, возвращаемые функцией в виде массива?
6. Viper - 24 Ноября, 2009 - 14:14:43 - перейти к сообщению
хм... вроде эта функция должна помочь http://ua2.php.net/manual/en/fun...ge-recursive.php
7. dimajak - 24 Ноября, 2009 - 15:57:12 - перейти к сообщению
array_merge_recursive(), как и array_merge() перенумеровывают числовые индексы, а у меня как раз такие. Помог простой + Радость
всем спасибо!
8. JustUserR - 24 Ноября, 2009 - 16:52:46 - перейти к сообщению
dimajak пишет:
Помог простой +
Да в PHP есть достаточно большие залежи функций для разных целей - в том числе для линейного решения рекурсивных задач (Шаг рекурсии обрабатывается самой встроенной функцией)
Хотя надо не забывать про кросс-совместимость - так как определенные функции есть не во всех версиях PHP (Не идеальна совместимости PHP4 и 5)

 

Powered by ExBB FM 1.0 RC1