这个foreach循环返回结果的两倍

问题描述:

我想运行一个脚本来获取特定组的成员id。 当我使用foreach循环时,它返回每个结果两次,有时会错过数据库中的最后一个结果。这个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循环等我洗耳恭听

感谢

+0

这可能是联想返回。这意味着它将返回与索引匹配的键索引结果。它适用于那些想立即使用结果偏移量的懒惰的人,而且也是一个命名绑定。如有疑问,请始终阅读文档; http://us2.php.net/mysqli_fetch_assoc – 2013-11-28 22:57:58

与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/>"; 
    } 
} 
?> 

答案很简单。这是因为有两种结果被提取:

  1. 联合阵列,例如, array [“key”]
  2. Indexed Array,例如数组[0]

使用mysqli_fetch_assoc如果你想关联数组

使用mysqli_fetch_row如果你想索引数组

如果您在mysqli_fetch_array阅读文档,你会看到默认的结果类型为MYSQLI_BOTH。这意味着每个值在阵列中出现两次。一个带有数字索引,另一个带有字符串列名。

foreach只是迭代数组中的所有元素;这包括数字和字符串版本,这就是它出现两次的原因。

如果您只是每行获取一个值,那么您无论如何都不应该使用foreach。

与mysqli,我相信你想使用fetch row,然后只需使用$array[0]抓住数组的第一个和唯一的值。