【问题标题】:Fetch array function doubling values in each position of array?在数组的每个位置获取数组函数加倍值?
【发布时间】:2012-10-06 23:31:37
【问题描述】:

我从这个函数中得到了奇怪的行为。

输入

    public function fetch_array($result_set) 
{
        $rows = array();
        while ($row = mysql_fetch_array($result_set)) 
        {
            $rows[] = $row;
            print_r($row);
            break;
        }
        return $rows;

}

我已经让函数运行了一次,但它从我的 MySQL 查询结果中复制了一行。

输出

Array ( [0] => Sarah [first_name] => Sarah [1] => Palin [second_name] => Palin ) 

应该是

正确输出

Array ( [first_name] => Sarah [second_name] => Palin ) 

我使用了这个 SO 问题示例

Use mysql_fetch_array() with foreach() instead of while()

不是我的查询或Mysql结果错误

http://i.imgur.com/CZnIF.png


这里出了什么问题?

【问题讨论】:

  • $rows 数组与mysql_fetch_array 返回的$row 数组完全相同。那么,为什么不在获取它之后返回 $row 呢?附带说明:不要使用mysql_ 函数。它们很快就会从 PHP 中删除。并使用mysql_fetch_assoc 而不是mysql_fetch_array
  • 技术上不一样,它是一个包含 $row 数组的数组,但你的观点是有效的。

标签: php mysql arrays fetch


【解决方案1】:

这不是错误,这是 mysql_fetch_array() http://us.php.net/manual/en/function.mysql-fetch-array.php 的预期行为

您可以设置result_type 标志,也可以只使用mysql_fetch_assoc()http://us.php.net/manual/en/function.mysql-fetch-assoc.php

【讨论】:

  • 当然,只需将$row = mysql_fetch_array($result_set) 替换为$row = mysql_fetch_assoc($result_set)
【解决方案2】:

当使用 mysql_fetch_array 时,向它提供 MYSQL_ASSOC 标志。

编辑:这是您的代码,进行了适当的更改

while ($row = mysql_fetch_array($result_set, MYSQL_ASSOC)) 

此外,您可以通过输入 MYSQL_NUM 来仅使用数字索引来获取它们

【讨论】:

    【解决方案3】:

    您得到一个结果并想要另一个结果的原因是因为您将一个数组($row)推入一个新数组($rows)中。通过在数组中推入一些东西(你使用的括号),你会得到一个自动递增的键。

    【讨论】:

      【解决方案4】:

      试试这个:

      $rows['name'] = $row['name'];
      $rows['second_name] = $row['second_name'];
      

      ...

      而不是

      $rows[] = $row;
      

      【讨论】:

      • 谢谢,但是如果我想将此功能与其他数据一起使用,我认为这不会起作用
      【解决方案5】:

      默认情况下,mysql_fetch_array 的每个数据库列都有两个键——一个是数字键,一个是关联键。 你可以这样做来告诉它只获取数字键:

      mysql_fetch_array($result, MYSQL_NUM);
      

      http://us2.php.net/manual/en/function.mysql-fetch-array.php

      【讨论】:

        【解决方案6】:

        这是完全正常和预期的行为。如果您只想要关联数组,请使用

        while ($row = mysql_fetch_array($result_set, MYSQL_ASSOC)) 
        

        【讨论】:

          猜你喜欢
          • 2021-11-06
          • 1970-01-01
          • 2018-09-15
          • 2019-06-09
          • 2018-08-07
          • 2016-05-25
          • 1970-01-01
          • 2020-02-19
          • 1970-01-01
          相关资源
          最近更新 更多