【问题标题】:While loop returns only first row valueWhile 循环仅返回第一行值
【发布时间】:2023-03-16 23:14:01
【问题描述】:

对于我的树类别,我使用下面的代码,但似乎有问题,因为它只返回第一行的值:

<?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); 
?>

任何想法我做错了什么以及如何解决这个问题?

【问题讨论】:

  • 永远不要将query 放在循环中,或者更糟糕的是,放在递归函数中。有 100 种方法可以更好地做到这一点。

标签: php while-loop


【解决方案1】:

我看到你没有对递归函数调用 return 做任何事情。具体来说,我认为您的意思是将这些结果也添加到 $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 变量以防止通知。

【讨论】:

    【解决方案2】:

    您的函数结果丢失。 替换:

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

    收件人:

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

    最后还显示结果:

    echo display_children(0,0); 
    

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2014-10-05
      • 2016-05-29
      相关资源
      最近更新 更多