2010-05-18 53 views
3

這對你們來說可能很容易,但我無法得到它。如何通過數組循環返回查詢Mysql

我有一個查詢數據庫並返回查詢結果的php類。我將結果賦值給一個數組,並且希望在我的main.php腳本中使用它。我試圖使用echo $ var [0]或 echo $ var [1],但輸出是'數組'而不是我的值。任何人都可以幫助我解決這個問題?非常感謝!

我的PHP類

<?php 
class teamQuery { 

      function teamQuery(){ 


      } 
      function getAllTeam(){ 
       $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS); 
        if (!$connection) { 
         die("Database connection failed: " . mysql_error()); 
        } 

        $db_select = mysql_select_db(DB_NAME,$connection); 
        if (!$db_select) { 
         die("Database selection failed: " . mysql_error()); 
        } 

        $teamQuery=mysql_query("SELECT * FROM team", $connection); 

        if (!$teamQuery){ 
         die("database has errors: ".mysql_error()); 
          } 
        $ret = array(); 

        while($row=mysql_fetch_array($teamQuery)){ 

        $ret[]=$row; 
        }  
        mysql_free_result($teamQuery); 

        return $ret; 
        } 


      } 


?> 

我的main.php PHP

$getTeam=new teamQuery(); 
$team=$getTeam->getAllTeam(); 

    //echo $team[0] or team[1] output 'array' string! 
    // while($team){ 
    // do something } can't work either 

    // How to loop through the values?? 

謝謝!

+0

非常感謝!我覺得我正坐在一堆專家旁邊。我只發佈了不到5分鐘的問題,得到了如此多的回覆。你們都是石頭! +1給你所有。由於Felix Kling解釋了很多細節。我給了他'接受的答案!'再次感謝! – FlyingCat 2010-05-18 21:13:56

回答

2

因爲$team[0]$team[1]確實陣列您得到這個輸出。它們是數據庫表的行,每行都由幾個字段組成,例如, idname
你有2維數組,這可能是這樣的:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => foo 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => bar 
     ) 
) 

要遍歷數據,使用forforeach

foreach($team as $member) { 
    foreach($member as $k=>$v) { 
     echo $k . ': ' . $v; 
    } 
} 

另外,documentation about arrays可能值得您閱讀。

1

嘗試此(和其變體):

foreach ($team as $member) { 
    echo $member[0]; 
    echo $member[1]; 
    //etc. 
} 
1

這是因爲每個陣列中的元素也是一個數組。 print_r該陣列用你自己的眼睛看它。例如,如果要輸出每個團隊的名稱,則必須先循環訪問外部數組,然後訪問循環中的各個字段。例如,如果要輸出每個團隊的名稱,則必須先循環訪問外部數組,然後訪問循環內的各個字段。

foreach ($team as $t) { 
    echo $t["name"] . "<br />"; // hopefully it's "name", the * in your query isn't really self-documenting 
} 
1
foreach ($team as $t) 
    echo $t[0]; 
2

首先建議:使用print_r函數來顯示數組。這很方便查看數據如何存儲在變量中。將它包裝在HTML標記<pre>中,以便它不在同一行上。例如:

echo '<pre>'; print_r($variable); echo '</pre>';

第二:你可能不想保存那樣的輸出。使用print_r顯示$ret變量,並查看數據的存儲方式。更有用的是使用mysql_fetch_assoc。試試這個:

while ($row = mysql_fetch_assoc($teamQuery)) { 
    echo '<pre>'; print_r($row); echo '</pre>' 
}

可以看到,每一行現在包含keyvalue,例如「名」和「李四」,「年齡」和「35」等,這樣就可以顯示某個值是這樣的:

echo $row['name']; // John Doe

當你從數據庫中檢索多個項目,並希望將它們存儲在一個數組中,您需要每個條目的唯一標識符。通常這是存儲數據的表中的唯一ID號。這樣,您可以將所有這些鍵和值一起,就像這樣:

while ($row = mysql_fetch_assoc($teamQuery)) { 
    $results[$row['id']]['name'] = $row['name']; 
    // etc 
}

您可以爲您檢索每個字段手動完成。如果你需要的所有字段(選擇*時,你通常會做),這是比較容易:

while ($row = mysql_fetch_assoc($teamQuery)) { 
    foreach ($row as $key => $value) { 
    $results[$row['id']][$key] = $value; 
    } 
}

$results數組現在包含這樣的事情:

Array 
(
    [1] => Array 
     (
      [id] => 1 
      [name] => John Doe 
     ) 

    [2] => Array 
     (
      [id] => 2 
      [name] => Jane Doe 
    ) 
)

......和所有其他值。現在您可以再次使用已經提到的foreach函數來顯示每個條目。您不必使用$key$value;選擇更有意義的東西最容易。例如,而不是$results(或您的$ret)使用$team$members,因爲這就是您要檢索的內容。然後顯示每個像這樣的成員:

foreach ($team as $memberId => $member) { 
    echo $member['name']; // John Doe, Jane Doe, etc. 
}
+0

哇...你真的讓我起來!感謝細節。爲了不好,我已經將接受的答案給了費利克斯·克林。我真的很感激你的時間和幫助! – FlyingCat 2010-05-18 21:33:41