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使用引用, 应该用函数将封装起来

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wir wissen, dass in der C-Sprache das Schlüsselwort „while“ verwendet wird, um eine Schleife zu definieren, die auf der Grundlage der an die Schleife übergebenen Bedingung funktioniert. Da die Bedingung nun zwei Werte haben kann, wahr oder falsch, wird der Code im while-Block wiederholt ausgeführt, wenn die Bedingung wahr ist, und nicht ausgeführt, wenn die Bedingung falsch ist. Durch die Übergabe von Parametern an die while-Schleife können wir nun zwischen while(1) und while(0) unterscheiden, da while(1) eine Schleife ist, in der die Bedingung immer als wahr gilt und der Code im Block daher wiederholt ausgeführt wird. Darüber hinaus können wir sagen, dass es nicht 1 ist, die an die Schleife übergeben wird, die die Bedingung wahr macht, sondern wenn eine beliebige Ganzzahl ungleich Null an die while-Schleife übergeben wird, wird sie als die wahre Bedingung betrachtet, also

Die Verwendung von while ist „while-Bedingung: Codeblock“. Wenn die Bedingung wahr ist, wird der Codeblock ausgeführt, und dann wird erneut beurteilt, ob die Bedingung wahr ist Der Block wird so lange ausgeführt, bis die Bedingung falsch ist. while ist eine häufig verwendete Schleifenkontrollanweisung, mit der ein Codeblock wiederholt ausgeführt wird, wenn bestimmte Bedingungen erfüllt sind.

In der Go-Sprache ist while kein Schlüsselwort. Sie können die for-Anweisung plus break verwenden, um den Effekt einer while-Schleife zu erzielen, z. B. „for {sum++ if sum>10{break}else{...}}“. Die Go-Sprache verfügt über 25 Schlüsselwörter wie break, default, func, select, case, defer, go, map, else, goto, for, if, var usw.

Hinweis 1. Die chinesische Bedeutung des Schlüsselworts while ist when..., das heißt, wenn die Bedingung erfüllt ist, wird der entsprechende Code in einer Schleife ausgeführt. Die while-Anweisung ist die Grundstruktur der Schleifenanweisung und das Syntaxformat ist relativ einfach. Ausführungsprozess 2. Bestimmen Sie beim Ausführen einer while-Anweisung zunächst die Schleifenbedingung. Wenn die Schleifenbedingung falsch ist, wird der nachfolgende Code der while-Anweisung direkt ausgeführt. Wenn die Schleifenbedingung wahr ist, wird der Schleifenkörpercode ausgeführt Die Bedingung wird so lange bestimmt, bis die Schleifenbedingung nicht mehr erfüllt ist. Beispiel inti=1;intsum=0;while(i

Was sind die gängigen Flusskontrollstrukturen in Python? In Python ist die Flusskontrollstruktur ein wichtiges Werkzeug zur Bestimmung der Ausführungsreihenfolge des Programms. Sie ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen oder einen Codeblock wiederholt auszuführen. Im Folgenden werden gängige Prozesssteuerungsstrukturen in Python vorgestellt und entsprechende Codebeispiele bereitgestellt. Bedingte Anweisungen (if-else): Bedingte Anweisungen ermöglichen es uns, verschiedene Codeblöcke basierend auf unterschiedlichen Bedingungen auszuführen. Die grundlegende Syntax lautet: if Bedingung 1: #when Bedingung

Ausführliche Erläuterung der Rolle und Verwendung des Schlüsselworts „break“ in PHP. In der PHP-Programmierung ist „break“ eine Kontrollflussanweisung, die verwendet wird, um die aktuelle Schleife oder Switch-Anweisung zu unterbrechen und aus der Schleife oder dem Switch zu springen. In diesem Artikel werden die Rolle und Verwendung des Schlüsselworts break im Detail vorgestellt. 1. Unterbrechung einer Schleife In einer Schleifenstruktur besteht die Funktion von Unterbrechung darin, die Schleife vorzeitig zu beenden und aus dem Schleifenkörper zu springen, um den Code nach der Schleife auszuführen. Zu den gängigen Schleifenstrukturen gehören for, while und do...while. in der for-Schleife

Java verwendet publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();}publicvoidhandleConnection(SocketconnectionToHandle){newThread(newConnectionHandler(connectionToHandle)).start();} und verwendet RemoteFileSer

Schleifen und Iterationen: Konzeptanalyse Eine Schleife ist eine Kontrollstruktur, die es ermöglicht, einen Codeblock wiederholt mit einer bestimmten Anzahl von Malen oder bis eine bestimmte Bedingung erfüllt ist, auszuführen. Python bietet eine Vielzahl von Schleifentypen, darunter for-Schleifen, while-Schleifen und do-while-Schleifen. Andererseits ist Iteration ein abstraktes Konzept, das den Prozess des Durchlaufens der Elemente einer Sequenz der Reihe nach darstellt. Python stellt Tools wie Iteratoren und Generatoren zur Implementierung der Iteration bereit. Schleife vs. Iteration: Ähnlichkeiten und Unterschiede Ausführungsmechanismus: Schleifen steuern explizit den Ausführungsfluss, während Iterationen implizit über Iteratorobjekte ausgeführt werden. Zustandsverwaltung: Schleifen verwalten ihren eigenen Zustand (z. B. Zähler oder Bedingungen), während Iteratoren die Zustandsverwaltung kapseln. Verwendungsszenarien: Schleifen eignen sich für Zeiten, die eine feste Anzahl von Malen oder bis zum wiederholt werden müssen
