为什么MySQL查询的循环改变了一个与查询无关的数组


Why a loop over MySQL query change an array which has nothing to do with the query?

我有以下一段代码:

print_r($queries);
$id2query = array(); 
while ($res_array = mysql_fetch_array($results)) {
    $id = $res_array['id'];
    $query = $res_array['query'];
    $id2query[$id] = $query;
}
print_r($queries);

有趣的是,在循环之前和之后的printr_r返回不同的东西。

有人知道这是怎么可能的吗?

添加

$queries是一个数组。它显示代码是函数的一部分,$queries是函数的参数之一。在循环之前,它返回:

Array ( [0] => )

循环后返回:

Array ( [0] => web 2.0 )

添加2

web 2.0来自$res_array。以下是$res_array的内容:

Array ( [0] => 17 [id] => 17 [1] => web 2.0 [query] => web 2.0 [2] 

但是我不明白$res_array的值是如何迁移到$queries的。

添加

3

I tried

print "AAAA".var_dump($queries)."BBB";

返回AAABBB

添加4

我已经设法以正确的方式使用var_dump,这是它在循环之前返回的内容:

array(1) { [0]=> &string(0) "" }

这是我在循环之后的内容:

array(1) { [0]=> &string(7) "web 2.0" }

但我不明白这是什么意思

add 4下面的var_dump显示,数组包含对字符串的引用。所以它不是那个字符串的副本,它有点像指向原始字符串的指针(我知道,它们不是真正的指针,参见下面的PHPDocs)。因此,如果该值被更改,引用也会显示更改后的值。

我建议你看一下:
PHPDoc引用
PHPDoc

示例代码:

$s = "lulu";
$a = array(&$s);
var_dump($a);
$s = "lala";
var_dump($a);

第一个var_dump将返回:

array(1) {
 [0]=>
 &string(4) "lulu"
}

第二个:

array(1) {
 [0]=>
 &string(4) "lala"
}