Php Foreach循环仅输出一个值

Php Foreach循环仅输出一个值,php,Php,我有一个foreach循环,它应该在表“notifications”中添加一行 但是,它只添加了一个值,当它应该添加两个通知时,一个用于用户1,一个用于用户3您只获取了一行,它应该是这样的: $infoquery = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'"; $identifier = mysqli_query($dbc, $infoquery); while($row = mysqli_fetch_

我有一个foreach循环,它应该在表“notifications”中添加一行


但是,它只添加了一个值,当它应该添加两个通知时,一个用于用户
1
,一个用于用户
3
您只获取了一行,它应该是这样的:

 $infoquery = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
 $identifier = mysqli_query($dbc, $infoquery);
 while($row = mysqli_fetch_array($identifier)){
     $core->addNotification($row['user_id'], $link, $description);
 }

除了tkausl的正确答案外,您的另一个问题是唯一访问者:
array\u unique
比较数组中项目的字符串值

让我们看看这个:

var_dump(strval(array("bob")), strval(array("ed")));
哪些产出:

string(5) "Array"
string(5) "Array"
(还有一大堆错误)

因此,由于它们的字符串表示形式是相同的,如果您希望使用多维数组
数组(数组(“用户”=>“bob”)、数组(“用户”=>“ed”)
,则其中只保留一个条目。现在,在PHP中有很多方法可以解决这个问题,但是您的数据库在这方面做得更好,请使用:

 SELECT DISTINCT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";

(但一定要查看准备好的语句,而不是添加原始参数/查询构建)。

或者,如果您有一个小的结果集,您可以使用该结果一次获取所有数据,并根据手册使用$result->fetch_all避免使用迭代获取数据(请参阅),如下所示:

<?php
$query = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
$identifier = mysqli_query( $dbc, $query );

$result = $mysqli->query( $query );
$rows = $result->fetch_all( MYSQLI_ASSOC );
foreach ( $rows as $row ) {
     $core->addNotification( $row['user_id'], $link, $description );
}

不,您迭代第一行,这意味着您将获得此行的每一列,而不是每一行。@Core查看我的答案,为什么您只通过一项!(array_unique)@Core:
mysql_fetch_array
只获取一行,而不是整个结果集。我完全忘记了
选择DISTINCT
,谢谢。我会给@tkausl的答案打上正确的标记,但他没有包括我需要的唯一答案。虽然他的答案是你的核心问题,但我建议你投票认为他的答案是正确的,而把我的答案挂起,作为升级为答案的超长评论。在他的修复之后,您将不再只添加1个条目,您将至少拥有所有必要的条目,只增加一倍;)可以我改了,谢谢!
<?php
$query = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
$identifier = mysqli_query( $dbc, $query );

$result = $mysqli->query( $query );
$rows = $result->fetch_all( MYSQLI_ASSOC );
foreach ( $rows as $row ) {
     $core->addNotification( $row['user_id'], $link, $description );
}