PHP foreach 摘引
Jun 13, 2016 pm 01:18 PM
PHP foreach 引用
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><?php $a = array( 'str1' => 'val1', 'str2' => 'val2', 'str3' => 'val3', 'str4' => 'val4', ); $b = array( 'str1', 'str2', 'str3', 'str4', ); foreach ($b as &$val) { $val = $a[$val]; } unset($val); foreach ($b as $val) { echo "-----$b[3]"; echo $val."\n"; } ?>
'val1','str2' => 'val2','str3' => 'val3','str4' => 'val4',);$b = array('str1', 'str2','str3','str4',);foreach ($b as &$val) {$val = $a[$val];}foreach ($b as $val) {echo "-----$b[3]";echo $val."\n";}?>
输出:
-----val1val1
-----val2val2
-----val3val3
-----val3val3
可以看到,因为第一个foreach 的引用最后的$[2] 引用没有关闭,所以,在第二个foreach 中已然在不断的对地址进行写操作;
通过打印$b[2] 的值,可以看出。随着foreach 的运行,$b[2] 的值在不断的改变。这就导致当foreach 运行到$b[1] 的时候,$b[2] 的值
就等于$b[1], 那么在最后一次运行时,$b[2] = $b[2] 就是的结果与$b[1] 一样了
解决方案:
使用unset () 方法将引用变量释放后再进行第二次foreach 循环。
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><?php $a = array( 'str1' => 'val1', 'str2' => 'val2', 'str3' => 'val3', 'str4' => 'val4', ); $b = array( 'str1', 'str2', 'str3', 'str4', ); foreach ($b as &$val) { $val = $a[$val]; } unset($val); foreach ($b as $val) { echo "-----$b[3]"; echo $val."\n"; } ?>
输出结果:
-----val4val1
-----val4val2
-----val4val3
-----val4val4
方案二(不怎么好):
<?php $a = array( 'str1' => 'val1', 'str2' => 'val2', 'str3' => 'val3', 'str4' => 'val4', ); $b = array( 'str1', 'str2', 'str3', 'str4', ); foreach ($b as &$val) { $val = $a[$val]; } // unset($val); foreach ($b as $item) { echo "-----$b[3]"; echo $item."\n"; } ?>
换掉第二次foreach 中的as 后的变量,不使用被引用的变量,那么不会出现这样的情况。
输出:
-----val4val1
-----val4val2
-----val4val3
-----val4val4
总结: 建议在引用之后使用unset() 对其释放。

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Solution : Votre organisation vous demande de modifier votre code PIN

Comment ajuster les paramètres de bordure de fenêtre sous Windows 11 : modifier la couleur et la taille

Comment changer la couleur de la barre de titre sous Windows 11 ?

Problèmes d'erreur OOBELANGUAGE dans la réparation de Windows 11/10

Comment activer ou désactiver les aperçus miniatures de la barre des tâches sur Windows 11

Afficher le guide de mise à l'échelle sur Windows 11

10 façons de régler la luminosité sous Windows 11

Comment désactiver l'authentification de navigation privée pour iPhone dans Safari ?
