Table des matières
php的循环与引用的一个坑,php循环引用
Maison développement back-end tutoriel php php的循环与引用的一个坑,php循环引用_PHP教程

php的循环与引用的一个坑,php循环引用_PHP教程

Jul 12, 2016 am 08:59 AM
while

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>
Copier après la connexion

这样的代码, var_dump 会输出什么? 各位可以试试, 答案

<span>string</span>(3) "a11"
<span>string</span>(3) "b22"
<span>string</span>(3) "b22"
Copier après la connexion

结果里, 第三行变成了 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使用引用,  应该用函数将封装起来

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1098446.htmlTechArticlephp的循环与引用的一个坑,php循环引用 上代码 $arr = array ( 'a'= 'a11', 'b'= 'b22', 'c'= 'c33', ); foreach ( $arr as $k = $v ){ // Do somethind } foreach ( $arr as...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

En langage C, quelle est la différence entre while(1) et while(0) ? En langage C, quelle est la différence entre while(1) et while(0) ? Aug 31, 2023 am 10:45 AM

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

Utilisation de while Utilisation de while Sep 25, 2023 am 09:47 AM

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.

Est-ce que while est un mot-clé dans le langage go ? Est-ce que while est un mot-clé dans le langage go ? Jun 04, 2021 pm 05:01 PM

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.

Comment utiliser l'instruction while en Java Comment utiliser l'instruction while en Java Apr 19, 2023 am 09:28 AM

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 ? Quelles sont les structures de contrôle de flux courantes en Python ? Jan 20, 2024 am 08:17 AM

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 de la fonction et de l'utilisation du mot-clé break en PHP Explication détaillée de la fonction et de l'utilisation du mot-clé break en PHP Jun 28, 2023 pm 06:39 PM

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

Comment utiliser les instructions de boucle while pour traiter les liens clés en Java Comment utiliser les instructions de boucle while pour traiter les liens clés en Java Apr 25, 2023 am 10:26 AM

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

Boucles et itérations Python : une analyse complète de leurs similitudes et différences Boucles et itérations Python : une analyse complète de leurs similitudes et différences Feb 19, 2024 pm 02:54 PM

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

See all articles