[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблма с массивом
Skaz
Добрый вечер. Очень нужна ваша помощь. PHP изучаю недавно, поэтому очень мало опыта.
На одном форуме нашел вывод дерева(3 уровня меню) рекурсией. Но вывод происходит определенного массива.
Все никак не получается преобразовать массив так, чтобы данные брались из БД.
Массив с функцией:

<?php
$a_tree=array(
array('k_item' =>1,'s_name' =>'1','a_tree' => array(
array('k_item' =>2,'s_name' =>'1.1','a_tree' => array(
array('k_item' =>3,'s_name' =>'1.1.1','a_tree' => array()),
array('k_item' =>4,'s_name' =>'1.1.2','a_tree' => array()),
array('k_item' =>5,'s_name' =>'1.1.3','a_tree' => array(
array('k_item' =>6,'s_name' =>'1.1.3.1','a_tree' => array())
)),
)),

array('k_item' =>7,'s_name' =>'1.2','a_tree' => array()),
array('k_item' =>8,'s_name' =>'1.3','a_tree' => array(
array('k_item' =>9,'s_name' =>'1.3.1','a_tree' => array()),
array('k_item' =>10,'s_name' =>'1.3.2','a_tree' => array())
)),

array('k_item' =>11,'s_name' =>'1.4','a_tree' => array(
array('k_item' =>12,'s_name' =>'1.4.1','a_tree' => array())
)),
)),

array('k_item' =>13,'s_name' =>'2','a_tree' => array()),
array('k_item' =>14,'s_name' =>'3','a_tree' => array(
array('k_item' =>15,'s_name' =>'3.1','a_tree' => array())
))
);


function tree_print(&$a_tree)
{

if(empty($a_tree)) return;
echo "<ul>";
for($i=0;$i<count($a_tree);$i++)
{
echo "<li>".$a_tree[$i]['s_name'];
tree_print($a_tree[$i]['a_tree']);
echo "</li>";
}
echo "</ul>";
}
?>


Примерно таким способом пытался вывести данные из БД в массив, соответственно поля в ф-и менял на свои.


<?php
$res=mysql_query("SELECT * FROM test");
if ($row=mysql_fetch_row($res))
{

$a_tree[] = array($row['id'], $row['name'], $row['parent_id']);

}?>




Спустя 28 минут, 6 секунд (18.08.2011 - 15:30) Michael написал(а):
Ты в своем заполнении не строишь дерево.
Тут о похожем говорилось.

Спустя 56 секунд (18.08.2011 - 15:31) Игорь_Vasinsky написал(а):
while() не хватает, и потом - для childrens тоже придётся while(), а цикл в цикле как то не очень хорошо. Другого способа не вижу.

Спустя 1 час, 55 минут, 49 секунд (18.08.2011 - 17:27) Skaz написал(а):
Цитата (Michael @ 18.08.2011 - 12:30)
Ты в своем заполнении не строишь дерево.
Тут о похожем говорилось.

Попробовал, но что-то не выходит.


<?php
$res=mysql_query("SELECT * FROM test");
while ($row=mysql_fetch_array($res))
{
$a = array();
$idpar = $row["parent_id"];
$id = $row['id'];
$a[$idpar][]= $id;
}

function printthree($el) { global $a;
if (isset($a[$el])) {
// имеет детей
echo $el;
echo '<div>';
foreach ($a[$el] as $val) {
printthree($val);
}
echo '</div>';
} else {
// лист дерева
echo $el;
}
}


printthree(0);
?>

Спустя 36 минут, 19 секунд (18.08.2011 - 18:03) Michael написал(а):
$a =  array();

как минимум надо вывести перед циклом, так же она на каждой итерации обнуляется. Подучи лучше основы языка, а потом уже к деревьям и рекурсии переходи.

Плюс тот вариант - когда корень в базе обозначен нулем, у тебя так?

Спустя 21 час, 33 минуты, 32 секунды (19.08.2011 - 15:37) Skaz написал(а):
Цитата (Michael @ 18.08.2011 - 15:03)
$a =  array();

как минимум надо вывести перед циклом, так же она на каждой итерации обнуляется. Подучи лучше основы языка, а потом уже к деревьям и рекурсии переходи.

Плюс тот вариант - когда корень в базе обозначен нулем, у тебя так?

Спасибо, вывел из массива, но вывод не тот

Вот что в БД:
id name parent_id
1 Меню1 0
2 Меню2 0
3 Подменю1 2
4 Подменю2 2
5 ПодПодменю1 1
6 Меню3 0
7 Подменю1 6
8 ПодПодменю1 7
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.