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 » SQL и Архитектура БД » Рекурсивное создание массива

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

1. Kubert - 22 Августа, 2011 - 17:58:18 - перейти к сообщению
Не могу найти функцию по созданию массива из mysql поделитесь!!!
Идея такая:
id | pid | name
1 | 0 | Категория 1
2 | 0 | Категория 2
3 | 1 | Категория 1.1
4 | 1 | Категория 1.2
5 | 1 | Категория 1.3
6 | 2 | Категория 2.1
7 | 3 | Категория 1.1.1
2. EuGen - 23 Августа, 2011 - 09:06:39 - перейти к сообщению
Нет такой функции, создавайте собственную в соответствии с Вашей структурой.
4. PATCH - 23 Августа, 2011 - 09:33:08 - перейти к сообщению
хм а разве mysql_fetch_array это не массив?)
5. EuGen - 23 Августа, 2011 - 09:35:18 - перейти к сообщению
Kubert пишет:
Рекурсивное создание массива
6. Kubert - 23 Августа, 2011 - 09:53:22 - перейти к сообщению
EuGen пишет:
Нет такой функции, создавайте собственную в соответствии с Вашей структурой.

Я понимаю, что это пользовательская функция! Посмею предположить рекурсивная... В этом то мне и нужна помощь...
7. illy - 23 Августа, 2011 - 10:19:10 - перейти к сообщению
Так что ли?

[0][1]
[0][2]
[1][1][1]
[1][1][2]
[1][1][3]
[2][2][1]
[3][1][1][1]
8. Kubert - 23 Августа, 2011 - 10:26:47 - перейти к сообщению
вот так:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $a_tree=array(
  3.   array('k_item' =>1,'s_name' =>'1','a_tree' => array(
  4.     array('k_item' =>2,'s_name' =>'1.1','a_tree' => array(
  5.       array('k_item' =>3,'s_name' =>'1.1.1','a_tree' => array()),
  6.       array('k_item' =>4,'s_name' =>'1.1.2','a_tree' => array()),
  7.       array('k_item' =>5,'s_name' =>'1.1.3','a_tree' => array(
  8.         array('k_item' =>6,'s_name' =>'1.1.3.1','a_tree' => array())
  9.       )),
  10.     )),
  11.     array('k_item' =>7,'s_name' =>'1.2','a_tree' => array()),
  12.     array('k_item' =>8,'s_name' =>'1.3','a_tree' => array(
  13.       array('k_item' =>9,'s_name' =>'1.3.1','a_tree' => array()),
  14.       array('k_item' =>10,'s_name' =>'1.3.2','a_tree' => array())
  15.     )),
  16.     array('k_item' =>11,'s_name' =>'1.4','a_tree' => array(
  17.       array('k_item' =>12,'s_name' =>'1.4.1','a_tree' => array())
  18.     )),
  19.   )),
  20.   array('k_item' =>13,'s_name' =>'2','a_tree' => array()),
  21.   array('k_item' =>14,'s_name' =>'3','a_tree' => array(
  22.     array('k_item' =>15,'s_name' =>'3.1','a_tree' => array())
  23.   ))
  24. );
  25.  

(Добавление)
помойму получилось... вот:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. function mym($i){
  3.         $res = mysql_query("SELECT * FROM category WHERE pid='$i'");
  4.         $topmenu = mysql_fetch_array($res);
  5.         if(isset($topmenu['id'])){
  6.                 do{
  7.                         echo $topmenu['name'].'<br>';
  8.                         mym($topmenu['id']);
  9.                 }while($topmenu = mysql_fetch_array($res));
  10.         }
  11.         return $i;
  12. }
  13.  
  14. mym(0);
  15.  

(Добавление)
опять запутался....
как теперь в массив внести все это безобразие, а потом еще и вынести его из функции...
9. LIME - 23 Августа, 2011 - 10:44:26 - перейти к сообщению
Kubert а чем не устроила ф-ция приведенная выше?
10. Kubert - 23 Августа, 2011 - 10:48:34 - перейти к сообщению
LIME пишет:
Kubert а чем не устроила ф-ция приведенная выше?


Я ее не совсем понял...
Можешь на примере объяснить?
11. LIME - 23 Августа, 2011 - 10:50:59 - перейти к сообщению
Kubert возвращает готовый массив из записей бд
(Добавление)
сделай вывод и поймешь
12. Kubert - 23 Августа, 2011 - 11:01:00 - перейти к сообщению
LIME
Смотри что у меня получается...

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $link = mysqli_connect("localhost", "root", "webmaster", "mydemo");
  3. $query = "SELECT id,pid,name FROM category";
  4.  
  5. if ($result = mysqli_query($link, $query)) {
  6.         $finfo = mysqli_fetch_fields($result);
  7.         foreach ($finfo as $val){
  8.                 printf("id:  %s\n", $val->id);
  9.                 printf("pid:  %s\n", $val->pid);
  10.                 printf("name:  %s\n", $val->name);
  11.         }
  12.         mysqli_free_result($result);
  13. }              
  14.  


На выходе вижу вот это:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. id:  
  3. pid:  
  4. name:  id
  5. id:  
  6. pid:  
  7. name:  pid
  8. id:  
  9. pid:  
  10. name:  name
  11.  
13. LIME - 23 Августа, 2011 - 11:08:30 - перейти к сообщению
сделаем проще
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  $link = mysqli_connect("localhost", "root", "webmaster", "mydemo");
  3. $query = "SELECT id,pid,name FROM category";
  4.  if ($result = mysqli_query($link, $query))
  5.      var_dump(mysqli_fetch_fields($result));
  6.  mysqli_free_result($result);
  7. }    
  8. ?>
к тому же вы используете ООП в выводе и процедурный подход в запросе
так нельзя
вывод тогда будет не $val->id а $val['id']
наверное опечатка в примере
(Добавление)
или я сам чегото не понял
14. Kubert - 23 Августа, 2011 - 11:12:42 - перейти к сообщению
LIME не понимаю!

у меня вот что...
Спойлер (Отобразить)

(Добавление)
Может мы вообще о разном?))) И я совсем ничего не понимаю...
15. EuGen - 23 Августа, 2011 - 11:28:47 - перейти к сообщению
Заходите "Поиск" (форумный), далее скажем строка поиска такая - "дерево mysql"
Примерно 40 тем, большинство из них соответствуют Вашей задаче.

 

Powered by ExBB FM 1.0 RC1