PHP数组中的重复数据条目

时间:2011-10-07 11:34:03

标签: php mysql database arrays

我不确定这是否合适,因为这对我来说更像是一个理解问题,但我很想知道为什么会收到这个输出:

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次查询以及这是否会影响速度或准确。非常感谢任何输入!

4 个答案:

答案 0 :(得分:4)

此行为已被删除。

来自http://php.net/manual/en/mysqli-result.fetch-array.php

mysqli_fetch_array()是mysqli_fetch_row()函数的扩展版本。除了将数据存储在结果数组的数字索引中之外,mysqli_fetch_array()函数还可以使用结果集的字段名作为键将数据存储在关联索引中。

答案 1 :(得分:4)

如果您查看mysqli_fetch_array的文档,则会看到第二个参数$result_type,默认设置为MYSQL_BOTH

这意味着数字字段索引(MYSQL_NUM)和字段名称(MYSQL_ASSOC)都用作数组索引。因此,如果您只需要字段名称索引,则必须使用它:

while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) {
    // ....

答案 2 :(得分:2)

阅读http://php.net/manual/en/function.mysql-fetch-array.php,它指出mysqli_fetch_array()的返回值(其工作方式与mysql_fetch_array()相同)包含数字索引的行数据以及字段名称索引行数据。如果您只想要字段名称索引数据,请使用mysqli_fetch_assoc()

答案 3 :(得分:2)

直接从文档中删除:

  

返回与获取的行对应的字符串数组,如果没有其他行,则返回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