Php Foreach迭代只返回最后一个循环的最后一个值
我试图获取并统计每个帖子的所有回复,例如,某个特定帖子的所有回复在列级别下都标记为2,但我的foreach循环只获取上一次迭代的值。例如,假设我想要来自post_id 91的所有评论回复,其post_id为评论92 95,而post_id为回复93 94 96。My foreach循环仅返回最后一个回复post_id 96,但我希望我的foreach循环保存所有post评论回复post id,例如,它应该返回所有post ID 93 94 96。我想知道我需要在我的代码中更改什么才能实现这一点,请帮助。谢谢 MySQL表结构Php Foreach迭代只返回最后一个循环的最后一个值,php,iteration,Php,Iteration,我试图获取并统计每个帖子的所有回复,例如,某个特定帖子的所有回复在列级别下都标记为2,但我的foreach循环只获取上一次迭代的值。例如,假设我想要来自post_id 91的所有评论回复,其post_id为评论92 95,而post_id为回复93 94 96。My foreach循环仅返回最后一个回复post_id 96,但我希望我的foreach循环保存所有post评论回复post id,例如,它应该返回所有post ID 93 94 96。我想知道我需要在我的代码中更改什么才能实现这一点,
CREATE TABLE posts(
post_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
parent_id INT UNSIGNED NOT NULL DEFAULT 0,
member_id INT UNSIGNED NOT NULL,
profile_id INT UNSIGNED NOT NULL,
level INT UNSIGNED NOT NULL DEFAULT 0,
post LONGTEXT DEFAULT NULL,
date_created DATETIME NOT NULL,
date_updated DATETIME DEFAULT NULL,
update_count INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (post_id)
);
MySQL表数据
post_id parent_id member_id profile_id level post date_created date_updated update_count
96 95 1 1 2 reply 1 for comment 2 2017-08-06 02:26:09 NULL 0
95 91 1 1 1 comment 2 2017-08-06 02:25:43 NULL 0
94 92 1 1 2 reply 2 2017-08-06 02:25:09 NULL 0
93 92 1 1 2 reply 1 2017-08-06 02:25:00 NULL 0
92 91 1 1 1 comment 1 2017-08-06 02:24:47 NULL 0
91 0 1 1 0 post 1 2017-08-06 02:24:31 NULL 0
PHP
问题
在foreach循环中,您在$parent\u id处于grab\u all\u post\u comment\u repress\u parent\u id$post\u id时循环。但是,您忘记的是,在每个循环结束时,会再次检查foreach循环中的条件
因此,每次foreach循环结束时,您再次调用该函数,它将当前数组替换为新数组,因此我们从一开始就搜索一个新数组,因此您只得到第一个结果
我在这里做的是在开始时运行函数一次,然后将其存储到变量中。现在它将毫无问题地遍历数组中的每个值
其次,不需要检查总和及其总数的位。foreach循环将始终结束,您可以在结束时返回值。但目前,您只需检查is 0==total,它不会是,然后返回,而不给您的循环继续运行的机会
只需将其移除,并在最后返回即可
解决方案
在函数“所有帖子注释回复”中存在以下错误:
if($sum = $total){ // assigment, not comparison
return $all_ids;
} else {
return false;
}
在if语句中,$total变量被分配给$sum。
无比较表达式且始终为真$sum始终大于0,只有当表达式等于零时才为假。
我认为它只迭代了一次。
修复为:
if($sum == $total){ // see ==
return $all_ids;
} else {
return false;
}
您正在每个循环中运行查询。因此,每一个循环,它只会从查询中得到第一个结果。@Toastracknigma我怎样才能解决这个问题?好的,所以你的代码有点混乱,几乎肯定没有正确完成。你想做什么?比如,所有的帖子、评论、回复都应该回音/返回什么?它应该只返回所有帖子的IDreplies@juice.gin他们怎么说?我的意思是说,代码和我发布的代码做的一样。它不会返回所有的回复,在那里发布id.@juice.gin。发现了另一个bug。现在应该可以了。这并没有获取所有回复帖子ID。
if($sum = $total){ // assigment, not comparison
return $all_ids;
} else {
return false;
}
if($sum == $total){ // see ==
return $all_ids;
} else {
return false;
}