PHP foreach输出所有内容两次


php foreach is outputting everything twice

一切正常,但输出被列出两次。

所以它回显为:'输出a' '输出a' '输出b' '输出b' '输出c' '输出c'等等。

当我在phpmyadmin中执行mysql查询时,所有内容只列出一次。什么好主意吗?

我的代码正在做的是获取一个多对多字段

<? 
    $something = mysql_query('select UserID from users where Username ="'. $username .'"');
    while ($row = mysql_fetch_array($something)) {
        $barf = $row['UserID'];
    }
    $result = mysql_query('SELECT name FROM items p LEFT JOIN list up ON p.item_id = up.item_id WHERE up.UserID =  "' . $barf . '"');
    while ($r = mysql_fetch_array($result)) {
        foreach($r as $uue) {
            echo $uue . '<br>';}
        }
    }
?>

试试下面的代码:

while ($r = mysql_fetch_assoc($result)){
  foreach($r as $uue) {
    echo $uue . '<br>';
  }
}

你得到重复的结果,因为默认情况下(MYSQL_BOTH标志)mysql_fetch_array返回2倍大小的数组:数字索引 + 字符串索引

因此,例如$r[0]$r['name']将是数组中包含相同值的不同元素。

另外,您应该停止使用mysql_*,因为它已被弃用。阅读mysqli_*函数

下面是一个使用单个查询和子查询的示例。当mysql可以在第一次运行时给你需要的数据时,不需要做两次循环。此外,在while中不需要额外的foreach循环,因为您的数据将作为列数组返回。你可以用index来回显你想要的。因为你只拉一列,你可以回显$r['name'],或者如果你做MYSQL_NUM,你可以回显$r[0]。

<?
$escaped_username = mysql_real_escape_string($username);
$query = <<<SQL
SELECT
    name
FROM
    items p
    LEFT JOIN list up ON p.item_id = up.item_id
WHERE
    up.UserID = (SELECT UserID FROM users WHERE Username = '{$escaped_username}')
SQL;
$result = mysql_query($query);
while ($r=mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo $r['name'] . '<br />';
}
?>

也使用mysqli可能是一个更好的路线,因为其他人已经说过。你可以走过程路线,也就是用mysqli_代替mysql_,或者你可以走面向对象路线。

<?    
$mysqli = new mysqli('host', 'user', 'pass', 'database');
$result = $mysqli->query($query);
while ($r = $result->fetch_object()) {
    echo $r->name . '<br />';
}
?>

不管你的真实答案是@jari,我想,为什么你不使用简单的echo $r[0]. '<br>';echo $r['name']. '<br>';而不是额外的foreach