2013-11-11 3 views
0

Для моей категории дерева я использую следующий код, но там, кажется, проблема, так как он возвращает только значение 1-й ряд:Хотя возвращается цикл только первое значение строки

<?php 
function display_children($parent, $level) { 
    $result = mysql_query("SELECT * FROM `category` WHERE `parent`='$parent'"); 
    while ($row = mysql_fetch_array($result)) { 
     $title = $row['title']; 
     $id = $row['id']; 
     $results .= str_repeat('-> ',$level).$title; 
     display_children($id, $level+1); 
    } 
    return $results; 
} 
display_children(0,0); 
?> 

Любые идеи Что я Я делаю неправильно и как это исправить?

+0

Никогда не ставить 'query' внутри цикла, или даже хуже, внутри рекурсивная функция. Есть 100 способов сделать это лучше. – Peon

ответ

2

Я вижу, что вы ничего не делаете с возвратом вызова рекурсивной функции. В частности, я думаю, что вы имеете в виду, чтобы добавить эти результаты в переменную $results ...

Попробуйте это:

<?php 
function display_children($parent, $level) { 
    $result = mysql_query("SELECT * FROM `category` WHERE `parent`='$parent'"); 
    $results = ''; 
    while ($row = mysql_fetch_array($result)) { 
     $title = $row['title']; 
     $id = $row['id']; 
     $results .= str_repeat('-> ',$level).$title; 
     $results .= display_children($id, $level+1); 
    } 
    return $results; 
} 
echo display_children(0,0); 
?> 

Кроме того, я объявил $results переменную для предотвращения уведомления.

+0

thx, полный рабочий день – Mohammad

2

Результат вашей функции потерян. Заменить:

$results .= str_repeat('-> ',$level).$title; 
display_children($id, $level+1); 

To:

$results .= str_repeat('-> ',$level).$title."\n".display_children($id, $level+1); 

И в конце также показывают результаты:

echo display_children(0,0); 
+0

thx, полный рабочий – Mohammad

Смежные вопросы