2013-11-28 73 views
2

我想運行一個腳本來獲取特定組的成員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

回答

7

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

答案很簡單。這是因爲有兩種結果被提取:

  1. 聯合陣列,例如, array [「key」]
  2. Indexed Array,例如數組[0]

使用mysqli_fetch_assoc如果你想關聯數組

使用mysqli_fetch_row如果你想索引數組

0

如果您在mysqli_fetch_array閱讀文檔,你會看到默認的結果類型爲MYSQLI_BOTH。這意味着每個值在陣列中出現兩次。一個帶有數字索引,另一個帶有字符串列名。

foreach只是迭代數組中的所有元素;這包括數字和字符串版本,這就是它出現兩次的原因。

如果您只是每行獲取一個值,那麼您無論如何都不應該使用foreach。

與mysqli,我相信你想使用fetch row,然後只需使用$array[0]抓住數組的第一個和唯一的值。