[英]Duplicated data entries in PHP array
我不確定這是否合適,因為這對我來說更像是一個理解問題,但我很想知道為什么我收到這個輸出:
Response id: 3 Question id: 1 Question: What is my middle name? Title: How Well Do You Know Michael
Array ( [0] => Array ( [0] => 3 [r_id] => 3 [1] => 1 [question_id] => 1 [2] => What is my middle name? [question] => What is my middle name? [3] => How Well Do You Know Michael [title] => How Well Do You Know Michael ) )
當我運行這個PHP腳本時:
// Grab the response data from the database to generate the form
$query = "SELECT qr.response_id AS r_id, qr.question_id, q.question, quiz.title " .
"FROM quiz_response AS qr " .
"INNER JOIN question AS q USING (question_id) " .
"INNER JOIN quiz USING (quiz_id) " .
"WHERE qr.user_id = '" . $_SESSION['user_id'] . "'";
$data = mysqli_query($dbc, $query) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query");
$questions = array();
while ($row = mysqli_fetch_array($data)) {
echo 'Response id: ' . $row['r_id'] . 'Question id: ' . $row['question_id'] . ' Question: ' . $row['question'] . ' Title: ' . $row['title'] . '<br />';
array_push($questions, $row);
}
print_r($questions);
似乎每個數據都有兩個條目。 例如,索引[0]和[r_id]下有兩個“響應ID”條目。 兩者都相等3. 是不是害怕我擔心我的數組中的重復數據呢? 當我一次做10個查詢時,我正在考慮未來,這是否會影響速度或准確性。 任何輸入都非常感謝!
這種行為是被懷疑的。
來自http://php.net/manual/en/mysqli-result.fetch-array.php
mysqli_fetch_array()是mysqli_fetch_row()函數的擴展版本。 除了將數據存儲在結果數組的數字索引中之外,mysqli_fetch_array()函數還可以使用結果集的字段名作為鍵將數據存儲在關聯索引中。
如果查看mysqli_fetch_array
的文檔,您會看到第二個參數$result_type
,默認設置為MYSQL_BOTH
。
這意味着數字字段索引( MYSQL_NUM
)和字段名稱( MYSQL_ASSOC
)都用作數組索引。 因此,如果您只需要字段名稱索引,則必須使用它:
while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) {
// ....
閱讀http://php.net/manual/en/function.mysql-fetch-array.php ,它指出mysqli_fetch_array()
的返回值mysqli_fetch_array()
與mysql_fetch_array()
工作方式相同)包含兩個數字索引的行數據以及字段名稱索引的行數據。 如果您只想要字段名稱索引數據,請使用mysqli_fetch_assoc()
。
直接從文檔中刪除:
返回與獲取的行對應的字符串數組,如果沒有更多行,則返回FALSE。 返回數組的類型取決於result_type的定義方式。 通過使用MYSQL_BOTH(默認),您將獲得一個包含關聯索引和數字索引的數組。 使用MYSQL_ASSOC,您只能獲得關聯索引(因為mysql_fetch_assoc()有效),使用MYSQL_NUM,您只能獲得數字索引(因為mysql_fetch_row()可以工作)。
所以改變這個:
while ($row = mysqli_fetch_array($data)) {
至:
while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) {
這將只返回字符串鍵,或者您可以使用mysqli_fetch_assoc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.