直接看代码:
-
<?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 );
-
- ?>
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 ---