我正在编写 PHP 代码来对数组中的每个值进行一些转换,然后从外部源(MySQL 游标或另一个数组)将一些值添加到数组中。如果我使用foreach
和引用来转换数组值
<?php
$data = array('a','b','c');
foreach( $data as &$x )
$x = strtoupper($x);
$extradata = array('d','e','f');
// actually it was MySQL cursor
while( list($i,$x) = each($extradata) ) {
$data[] = strtoupper($x);
}
print_r($data);
?>
比数据被破坏。所以我得到
Array ( [0]=>A [1]=>B [2]=> [3]=>D [4]=>E [5] =>F )
代替
Array ( [0]=>A [1]=>B [2]=>C [3]=>D [4]=>E [5] =>F )
当我不使用参考并写
foreach( $data as &$x )
$x = strtoupper($x);
当然,转换不会发生,但数据也没有损坏,所以我得到
Array ( [0]=>a [1]=>b [2]=>c [3]=>D [4]=>E [5] =>F )
如果我写这样的代码
<?php
$result = array();
$data1 = array('a','b','c');
foreach( $data1 as $x )
$result[] = strtoupper($x);
$data2 = array('d','e','f');
// actually it was MySQL cursor
while( list($i,$x) = each($data2) ) {
$result[] = strtoupper($x);
}
print_r($result);
?>
一切都按预期工作。
Array ( [0]=>A [1]=>B [2]=>C [3]=>D [4]=>E [5] =>F )
当然,我复制数据解决了这个问题。但我想了解该引用的奇怪问题是什么,以及如何避免这些问题。也许在代码中使用 PHP 引用通常是不好的(就像许多人所说的 C 指针)?