簡體   English   中英

PHP數組中的重復數據條目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM