Heim > Backend-Entwicklung > PHP-Tutorial > 算法 - PHP的一个小问题。

算法 - PHP的一个小问题。

WBOY
Freigeben: 2016-06-06 20:31:28
Original
942 Leute haben es durchsucht

算法 - PHP的一个小问题。

为什么会这样?为啥前两个下标没引用,而偏偏最后一个用到了,谁能系统的解释一下以及原理。

回复内容:

算法 - PHP的一个小问题。

为什么会这样?为啥前两个下标没引用,而偏偏最后一个用到了,谁能系统的解释一下以及原理。

因为foreach完成之后,最后的$a依然是引用的$array[2],但最后执行了$a=0,这里就相当于$array[2]=0(原来应该是$array[2]=9),所以最后的结果是

<code>[1, 4, 0]
</code>
Nach dem Login kopieren

指针相互影响的原因, 貌似PHP7已经解决了该问题..

<code>PHP5: 
•  $a = array(1,2,3); foreach($a as $v) { var_dump(current($a)) } 
int(2) 
int(2) 
int(2)
•  $a = array(1,2,3); $b=&$a; foreach($a as $v) { var_dump(current($a))} 
int(2) 
int(3) 
bool(false) 
•  $a = array(1,2,3); $b=$a; foreach($a as $v) { var_dump(current($a))} 
int(1) 
int(1) 
int(1) 
</code>
Nach dem Login kopieren
<code>PHP7: Doesn’t use/modify array internal pointer anymore 
•  $a = array(1,2,3); foreach($a as $v) { var_dump(current($a)) } 
int(1) 
int(1) 
int(1)
•  $a = array(1,2,3); $b=&$a; foreach($a as $v) { var_dump(current($a))} 
int(1) 
int(1) 
int(1) 
•  $a = array(1,2,3); $b=$a; foreach($a as $v) { var_dump(current($a))} 
int(1) 
int(1) 
int(1) 
</code>
Nach dem Login kopieren

摘至鸟哥

弄明白引用与传值的区别,这个问题也就明白了。
在foreach中$a指的就是$array中的元素,通过循环先指向$array[0],然后是$array[1]...,你可以理解为$array中的元素在循环过程中多了一个$a标签,它们是指向同一个值(物理地址)的。所以在foreach中,$array的元素都被引用了,$a = $a这个运算结果反应在$array数组中。
其中当循环到第三次的时候,通过$a
=$a运算,$array[2]的值变为了9,循环结束,但是这是$a还是$array[2]的引用,并没有注销,这是将$a赋值为0,所以$array[2]就变成了0.
所以最终结果就是[1,4,0];

这问题前几天面试的时候正好遇到了,因为下面使用的$a还没有被释放掉,还是$array数组中的引用。所以一般使用foreach的引用传值时最好在后面unset一下咯

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage