现象:
直接看代码:
-
<?php
-
$content = array(
-
array('image'=>'a.jpg'),
-
array('image'=>'b.jpg'),
-
array('image'=>'c.jpg')
-
);
-
if( is_array( $content )){
-
foreach( $content as &$v ){
-
$v['sort'] = 1;
-
}
-
}
-
-
$arr = array(
-
's1'=>1,
-
's2'=>2,
-
's3'=>3
-
);
-
-
$arr2 = array();
-
foreach( $arr as $v ){
-
$arr2[] = $v;
-
}
-
-
var_dump( $content, $arr2 );
-
-
?>
说明:1、本例意图:先定义一个content,然后为content的每一个元素添加一个sort项。
2、在写代码时,因为结构比较简单,直接使用了默认的&$v作为as的子句。
3、后来又使用了一次foreach,同样使用了$v。
4、结果……就出错了。
思考:你认为content[3]的结果是什么?
结果:注意红字部分。
-
array(3) {
-
[0]=>
-
array(2) {
-
["image"]=>
-
string(5) "a.jpg"
-
["sort"]=>
-
int(1)
-
}
-
[1]=>
-
array(2) {
-
["image"]=>
-
string(5) "b.jpg"
-
["sort"]=>
-
int(1)
-
}
-
[2]=>
-
&int(3)
-
}
-
array(3) {
-
[0]=>
-
int(1)
-
[1]=>
-
int(2)
-
[2]=>
-
int(3)
-
}
结论:
如果使用了foreach的元素引用符&,一定要注意本次循环结束后,仍然维持了最后一次对$v的关系。
--- end ---
阅读(1866) | 评论(0) | 转发(0) |