PHP - 循环内部循环,用于分层嵌套问题和答案

时间:2013-01-12 14:33:17

标签: php loops parent-child

我假装在层次结构中显示这个多维数组,显示孩子在父母下面的评论。

$comments = Array
(
[0] => Array
    (
        [id] => 1
        [text] => What is the capital of Japan?
        [parent_id] => 0
    )
[1] => Array
    (
        [id] => 2
        [text] => What is the capital of Canada?
        [parent_id] => 0
    )
[2] => Array
    (
        [id] => 3
        [text] => I think is Kyoto
        [parent_id] => 1
    )
[3] => Array
    (
        [id] => 4
        [text] => You are wrong, is Tokyo
        [parent_id] => 3
    )

我在这里搜索了许多答案,但其中大多数都涉及到DB的几个查询,或者数组中不需要的次级字段。一个非常简单有效的循环函数可以使它运行。我不是专家,而且我使用的是非常基本的代码,但这次效果不佳:

让我们发一个初始循环,其函数只显示父评论(父母有[parent_id] = 0)

echo '<ol>';
loopComments($comments, 0);
echo '</ol>';

以下是功能:

function loopComments($comments, $parent) {
    foreach ($comments as $post) {
        if ($post[parent_id] == $parent) {      
            printPost($post);
        }
    }
}

//The function below prints the post and searches for related answers
//sadly FAILS when looping again! 

function printPost($post) {
    echo "<li>".$post['text']."</li>";
    loopComments($comments, $post['parent_id']);
}

可悲的是我收到'警告:为foreach()提供的参数无效

2 个答案:

答案 0 :(得分:0)

在你的printPost()函数中,你需要有一个参数来解析comments变量,以便在函数中使用该数组

function printPost($post, $comments) {}

当你打电话给你时,你会有

function loopComments($comments, $parent) {
    foreach ($comments as $post) {
        if ($post[parent_id] == $parent) {      
            printPost($post, $comments);
        }
    }
}

答案 1 :(得分:0)

我认为您的代码存在问题。

步骤:
1.拨打 loopComments 2.第一次在 loopComments 中调用 printPost
3.在 printPost 中使用评论,但不在 printPost 中定义(它在调用函数中定义 loopComments printPost 之外。)

所以,问题是:
您应该在 printPost foreach 循环中使用变量 $ posts ,而不是 $ comments