我假装在层次结构中显示这个多维数组,显示孩子在父母下面的评论。
$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()提供的参数无效
答案 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 。