php 循环数组问题
Posted 上善若水-随
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 循环数组问题相关的知识,希望对你有一定的参考价值。
$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 循环数组问题的主要内容,如果未能解决你的问题,请参考以下文章