码迷,mamicode.com
首页 > 编程语言 > 详细

php 循环数组问题

时间:2017-10-05 19:11:28      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:遍历数组   log   copy   循环数组   array   数组   reac   unset   each   

$a = array(‘abe‘,‘ben‘,‘cam‘);
 //foreach遍历数组时,实际上是遍历的数组的一个拷贝,并且在开始遍历之前会把指针指向拷贝的开始;,根据cow机制,写时,重新复制一份数组内的单元
foreach ($a as $k=>&$n){
    $n = $n; 
//相当于下面
// $n =&$a[‘0‘];
// $n =&$a[‘1‘];
// $n =&$a[‘2‘];
}
//unset($n); //好习惯

print_r($a);
  
foreach ($a as $k=>$n){ // notice NO reference here! 

// k=0     &$a[2] = n = abe   [‘abe‘,‘ben‘,‘abe‘]
// k=1     &$a[2] n=ben       [‘abe‘,‘ben‘,‘ben‘]
// k=2     &$a[2] n=cam       [‘abe‘,‘ben‘,‘ben‘]
   echo "$n\n";
}
print_r($a);

  

$data = [‘a‘,‘b‘,‘c‘,‘d‘];

foreach ($data as $key => $val) 
{
	$val = & $data[$key];
	
}

echo "<pre>";
print_r($data);

  

1,php在变量赋值时候的内存使用策略:写时复制(copy on write, COW),当用赋值方法把一个变量值赋给另一个变量时,由于这两个变量值相同,因此公用同一内存,当其中一个变量值发生变化时候,才会重新为值变化的变量申请内存,已达到节省内存的目的;
2,foreach遍历数组时,实际上是遍历的数组的一个拷贝,并且在开始遍历之前会把指针指向拷贝的开始;
3,在发生写时复制时候,指针的位置也会一并被复制

php 循环数组问题

标签:遍历数组   log   copy   循环数组   array   数组   reac   unset   each   

原文地址:http://www.cnblogs.com/boundless-sky/p/7629808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!