Foreach循环只输出一个值

时间:2014-11-25 21:10:37

标签: php

我有一个foreach循环,应该在表“notification”

中添加一行
            $infoquery = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
            $identifier = mysqli_query($dbc, $infoquery);
            $rows = mysqli_fetch_array($identifier);
            foreach(array_unique($rows) as $row){
            $core->addNotification($row['user_id'], $link, $description);
            }

但它只添加一个值,它应该添加两个通知,一个用于用户1,另一个用于用户3

3 个答案:

答案 0 :(得分:2)

您只获取一行,它应该是这样的:

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

答案 1 :(得分:1)

除了tkausl的正确答案之外,您的另一个问题是唯一身份访问者:array_unique会比较数组中项目的字符串值。

让我们来看看:

var_dump(strval(array("bob")), strval(array("ed")));

哪个输出:

string(5) "Array"
string(5) "Array"

(以及一大堆错误)。

因此,由于它们的字符串表示相同,如果您期望多维数组array(array("user"=>"bob"),array("user"=>"ed")),那么您将只保留一个条目。现在,有很多方法可以在PHP中解决这个问题,但是你的数据库更好,使用:

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

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

答案 2 :(得分:0)

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

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