php - 这个 foreach 循环返回双倍的结果

标签 php arrays loops foreach

我正在尝试运行一个脚本来获取特定组的成员 ID。 当我使用 foreach 循环时,它会返回每个结果两次,有时会错过数据库中的最后一个结果。

这是我的代码:

    <?php
    include_once("scripts/checkuserlog.php");
    $squadid = "";
    if (isset($_GET['pid'])){ $squadid = $_GET['pid'];};

    $sqlName = "SELECT mem_id FROM team_members WHERE team_id='$squadid' AND is_member='1'" or die ("Sorry we had a mysql error!");
    $queryName = mysqli_query($db_conx, $sqlName);
    while($array = mysqli_fetch_array($queryName)){
        foreach($array as $value){
            echo "$value<br/>";
        } 
    }
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Untitled Document</title>
    </head>
    <body>
    </body>
    </html>

抛出的结果看起来像这样:

3
3
2
2
1
1
4
4
5
5

显然每个号码应该只有一个,因为每个成员只能加入每个组一次。

我之前从未真正使用过 foreach 循环,我不能 100% 确定它们的工作原理,我对语法做了一些研究,但无法弄清楚我哪里出错了。我只能假设我调用了两次但不确定在哪里。

如果有人知道比 foreach 循环更好的方法来实现我所需要的,我会洗耳恭听

谢谢

最佳答案

尝试使用 mysqli_fetch_assoc,msqli_fetch_array 返回数字键和字符串。

<?php
include_once("scripts/checkuserlog.php");
$squadid = "";
if (isset($_GET['pid'])){ $squadid = $_GET['pid'];};

$sqlName = "SELECT mem_id FROM team_members WHERE team_id='$squadid' AND is_member='1'" or die ("Sorry we had a mysql error!");
$queryName = mysqli_query($db_conx, $sqlName);
while($array = mysqli_fetch_assoc($queryName)){
    foreach($array as $value){
        echo "$value<br/>";
    } 
}
?>

关于php - 这个 foreach 循环返回双倍的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275891/

相关文章:

php - 使用命名参数在我的 SQL 中找不到错误

php - Prestashop 类别页面加载速度太慢

python - 在没有全 1 行的 numpy 中生成随机矩阵

r - 方差分析,for 循环应用函数

algorithm - 如何确定链表是否具有仅使用两个内存位置的循环

php - 加载执行时的 JavaScript

php - PHP 表单处理时加载 gif

c# - 为什么 Stack、Queue 和 List 在删除项目后不收缩内部数组?

arrays - APAddressBOOK 错误 : "fatal error: Array index out of range"

vba - 对于循环设置字体和范围内部花费的时间太长