Inhaltsverzeichnis
php的循环与引用的一个坑,php循环引用
Heim Backend-Entwicklung PHP-Tutorial 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>
Nach dem Login kopieren

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

<span>string</span>(3) "a11"
<span>string</span>(3) "b22"
<span>string</span>(3) "b22"
Nach dem Login kopieren

结果里, 第三行变成了 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...
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist in der C-Sprache der Unterschied zwischen while(1) und while(0)? Was ist in der C-Sprache der Unterschied zwischen while(1) und while(0)? Aug 31, 2023 am 10:45 AM

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

Verwendung von while Verwendung von while Sep 25, 2023 am 09:47 AM

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.

Ist while ein Schlüsselwort in der Go-Sprache? Ist while ein Schlüsselwort in der Go-Sprache? Jun 04, 2021 pm 05:01 PM

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.

So verwenden Sie die while-Anweisung in Java So verwenden Sie die while-Anweisung in Java Apr 19, 2023 am 09:28 AM

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? Was sind die gängigen Flusskontrollstrukturen in Python? Jan 20, 2024 am 08:17 AM

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

Detaillierte Erläuterung der Funktion und Verwendung des Schlüsselworts break in PHP Detaillierte Erläuterung der Funktion und Verwendung des Schlüsselworts break in PHP Jun 28, 2023 pm 06:39 PM

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

So verwenden Sie While-Schleifenanweisungen zum Verarbeiten wichtiger Links in Java So verwenden Sie While-Schleifenanweisungen zum Verarbeiten wichtiger Links in Java Apr 25, 2023 am 10:26 AM

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

Python-Schleifen und -Iterationen: eine umfassende Analyse ihrer Ähnlichkeiten und Unterschiede Python-Schleifen und -Iterationen: eine umfassende Analyse ihrer Ähnlichkeiten und Unterschiede Feb 19, 2024 pm 02:54 PM

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

See all articles