Mysqli fetch_assoc vs fetch_array

时间:2014-01-26 08:10:46

标签: php

当我从表中返回一行时,为了收集我通常使用的结果,例如:

$info = $result->fetch_assoc(); 

有什么区别:

$info = $result->fetch_array();

当只返回一行时,是否有理由使用其中一个,或者仅仅是个人偏好?

4 个答案:

答案 0 :(得分:22)

这完全取决于性能

fetch_array()返回一个包含数字键和关联字符串(列名称)的数组,因此您可以使用$row['column_name']$row[0]

fetch_assoc()将返回字符串索引键数组而不返回数值数组,因此您将无法使用 $row[0] 之类的数字键。

因此,与fetch_array()相比,后者的性能更好,显然使用命名索引与数字索引相比要好得多。

答案 1 :(得分:9)

fetch_array返回带索引的值。 但是Fetch_assoc只返回值。

例如,

fetch_array返回

[0] => 11
[id] => 11
[1] => 2014-12-29
[date] => 2014-12-29

此处数组位置0包含11,此位置名称也是' id'。

同样的事情fetch_assoc将返回

[id] => 11
[date] => 2014-12-29

表示只返回值。

答案 2 :(得分:2)

(PHP 5) 来自:http://php.net/manual/en/mysqli-result.fetch-array.php

  

mysqli_result :: fetch_array - mysqli_fetch_array - 获取结果行   作为关联,数字数组或两者

如此有效,fetch_array()fetch_assoc()可以是基本上等效的调用。至于性能,我建议使用哪个调用可以产生更易读的代码,并且只有在将调用明确地识别为性能问题后才关注性能。您最不希望出现的问题更可能是您遇到了更严重的性能问题。

答案 3 :(得分:0)

fetch_array将为您提供键/值对和索引,其中fetch_assoc将仅为您提供键/值对,但不为您提供索引。例如:

//fetch_array output be like:
[name]=>'someName'
[0]=>'someName'
[email]=>'some@some.com'
[1]=>'some@some.com'

//fetch_assoc output be like

[name]=>'someName'
[email]=>'some@some.com'