Php Foreach迭代只返回最后一个循环的最后一个值

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。我想知道我需要在我的代码中更改什么才能实现这一点,

我试图获取并统计每个帖子的所有回复,例如,某个特定帖子的所有回复在列级别下都标记为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表结构

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;
            }