php的循环与引用的一个坑,php循环引用_PHP教程
php的循环与引用的一个坑,php循环引用
上代码
<span>$arr</span> = <span>array</span><span>( </span>'a'=> 'a11', 'b'=> 'b22', 'c'=> 'c33',<span> ); </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$k</span>=>&<span>$v</span><span>){ </span><span>//</span><span> Do somethind</span> <span>} </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$k</span>=><span>$v</span><span>){ </span><span>var_dump</span>(<span>$v</span><span>); }</span>
这样的代码, var_dump 会输出什么? 各位可以试试, 答案
<span>string</span>(3) "a11" <span>string</span>(3) "b22" <span>string</span>(3) "b22"
结果里, 第三行变成了 key='b' 的value. 问题就出在第一个循环的引用.
今天就踩到了一个这样的坑, 查问题用了很久. 简单来说, foreach循环使用的引用, 循环结束后有所保留. php.net 着重写了:
Warning
Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
对于上面这个例子, 第一个循环结束后, $v引用仍然存在. 由于两个循环的变量命名一致, 第二个循环开始, $v 每次都会被赋值. 直到最后, $v 被设置成了
前一个元素的值.
原理很简单, 文档写的明明白白. 但如果工作中遇到相关的bug是很坑的, 定位需要很久. 还得需要写码的时候就注意:
1. 减少引用的使用
2. 如果需要在foreah使用引用, 应该用函数将封装起来

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

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

Nous savons qu'en langage C, le mot-clé 'while' est utilisé pour définir une boucle qui fonctionne en fonction de la condition passée à la boucle. Désormais, puisque la condition peut avoir deux valeurs, vraie ou fausse, le code à l'intérieur du bloc while sera exécuté à plusieurs reprises si la condition est vraie et ne sera pas exécuté si la condition est fausse. Maintenant, en passant des paramètres à la boucle while, nous pouvons faire la différence entre while(1) et while(0) car while(1) est une boucle où la condition est toujours considérée comme vraie et donc le code à l'intérieur du bloc commencera à s'exécuter à plusieurs reprises. De plus, nous pouvons affirmer que ce n'est pas 1 qui est passé à la boucle qui rend la condition vraie, mais si un entier non nul est passé à la boucle while, alors il sera considéré comme la condition vraie, donc

L'utilisation de while est " while condition : bloc de code ". La condition est une expression Lorsque la condition est vraie, le bloc de code est exécuté, puis il est à nouveau jugé si la condition est vraie, le code. Le bloc continue d'être exécuté jusqu'à ce que la condition soit fausse. while est une instruction de contrôle de boucle couramment utilisée, utilisée pour exécuter de manière répétée un bloc de code lorsque certaines conditions sont remplies.

Dans le langage Go, while n'est pas un mot-clé. Vous pouvez utiliser l'instruction for plus break pour obtenir l'effet d'une boucle while, telle que "for {sum++ if sum>10{break}else{...}}". Le langage go contient 25 mots-clés tels que break, default, func, select, case, defer, go, map, else, goto, for, if, var, etc.

Remarque 1. La signification chinoise du mot-clé while est when..., c'est-à-dire que lorsque la condition est établie, le code correspondant est exécuté en boucle. L'instruction while constitue la structure de base de l'instruction de boucle et le format de syntaxe est relativement simple. Processus d'exécution 2. Lors de l'exécution d'une instruction while, déterminez d'abord la condition de boucle. Lorsque la condition de boucle est fausse, le code suivant de l'instruction while est directement exécuté. Lorsque la condition de boucle est vraie, le code du corps de la boucle est exécuté et la boucle. La condition est déterminée jusqu'à ce que la condition de boucle ne soit pas établie. Exemple inti=1;intsum=0;while(i

Quelles sont les structures de contrôle de flux courantes en Python ? En Python, la structure de contrôle de flux est un outil important utilisé pour déterminer l'ordre d'exécution du programme. Ils nous permettent d'exécuter différents blocs de code en fonction de différentes conditions, ou d'exécuter un bloc de code de manière répétée. Ce qui suit présentera les structures de contrôle de processus courantes en Python et fournira des exemples de code correspondants. Instructions conditionnelles (if-else) : les instructions conditionnelles nous permettent d'exécuter différents blocs de code en fonction de différentes conditions. Sa syntaxe de base est la suivante : if condition 1 : #when condition

Explication détaillée du rôle et de l'utilisation du mot-clé break en PHP Dans la programmation PHP, break est une instruction de flux de contrôle utilisée pour interrompre la boucle ou l'instruction switch en cours et sortir de la boucle ou du commutateur. Cet article présentera en détail le rôle et l'utilisation du mot-clé break. 1. Break dans une boucle Dans une structure de boucle, la fonction de break est de terminer la boucle plus tôt et de sortir du corps de la boucle pour exécuter le code après la boucle. Les structures de boucle courantes incluent for, while et do... while. dans la boucle for

Java pour publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}pourRemoteFileSer

Boucles et itérations : analyse de concept Une boucle est une structure de contrôle qui permet à un bloc de code d'être exécuté de manière répétée un nombre de fois spécifié ou jusqu'à ce qu'une condition spécifique soit remplie. Python fournit une variété de types de boucles, y compris les boucles for, les boucles while et les boucles do-while. D'un autre côté, l'itération est un concept abstrait qui représente le processus de parcours des éléments d'une séquence dans l'ordre. Python fournit des outils tels que des itérateurs et des générateurs pour implémenter l'itération. Boucle vs itération : similitudes et différences Mécanisme d'exécution : les boucles contrôlent explicitement le flux d'exécution, tandis que les itérations sont effectuées implicitement via des objets itérateurs. Gestion de l'état : les boucles conservent leur propre état (comme les compteurs ou les conditions), tandis que les itérateurs encapsulent la gestion de l'état. Scénarios d'utilisation : les boucles conviennent aux moments qui doivent être répétés un nombre fixe de fois ou jusqu'à ce que le
