Heim  >  Artikel  >  Backend-Entwicklung  >  Eine „Grube“ in PHP

Eine „Grube“ in PHP

WBOY
WBOYOriginal
2016-08-08 09:27:121212Durchsuche

Lassen Sie uns über ein Problem sprechen, mit dem Sie bei der Arbeit wahrscheinlich konfrontiert werden – ein Zitat von foreach

<span>$arr</span> = <span>range</span>(1,3<span>);
</span><span>//</span><span>[1,2,3]</span>

<span>foreach</span>(<span>$arr</span> <span>as</span> &<span>$val</span><span>) {
}

</span><span>foreach</span>(<span>$arr</span> <span>as</span> <span>$val</span><span>) {
}
</span><span>print_r</span>(<span>$arr</span><span>);
 </span>

Was gibt der obige Code aus? Das Erstaunliche ist, dass ich bei der Arbeit darauf gestoßen bin. Es hat lange gedauert, bis ich den Grund herausgefunden habe. Es gibt zwei Möglichkeiten, das Problem zu lösen Problem. Nummer:

<span>Array</span><span>
(
    [</span>0] => 1<span>
    [</span>1] => 2<span>
    [</span>2] => 2<span>
)</span>

Die folgenden zwei Methoden können das oben genannte Problem lösen:

<span>//</span><span>方法1</span>
<span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) {
}
</span><span>unset</span>(<span>$value</span><span>);
</span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$value</span><span>) {
}
</span><span>print_r</span>(<span>$arr</span><span>);
</span><span>//</span><span>[1,2,3]

//方法2</span>
<span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) {
}
</span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$val</span><span>) {
}
</span><span>print_r</span>(<span>$arr</span><span>);
</span><span>//</span><span>[1,2,3]
//方法3</span>
<span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) {
}
</span><span>foreach</span> (<span>$arr</span> <span>as</span> &<span>$value</span><span>) {
}
</span><span>print_r</span>(<span>$arr</span><span>);
</span><span>//</span><span>[1,2,3]</span>

Methode 1 ist auch im offiziellen Handbuch http://php.net/manual/en/control-structures.foreach.php zu sehen. Im Artikel gibt es einen besonderen Tipp, der daran erinnert

Warum sind Methode 2 und Methode 3 in Ordnung? Nachdem Sie das Folgende gelesen haben, handelt es sich tatsächlich um eine Zeigervariable, die auf ein Element im Array zeigt Schauen Sie sich zunächst das Folgende an. Es ist leicht zu verstehen, dass tmp auf den Speicherplatz von var verweist

<span>$var</span> = 123<span>;
</span><span>$tmp</span> = &<span>$var</span><span>;
</span><span>$tmp</span> = 200<span>;
</span><span>echo</span> <span>$var</span><span>;
</span><span>//</span><span>200</span>
Schauen Sie sich das gestohlene Bild unten an (haha, der Originallink ist unten gepostet), um das Obige besser zu verstehen

Okay, nachdem dies in Ordnung ist, schauen Sie sich Folgendes an (ich weiß nicht, mit welcher Software das obige Bild gezeichnet wurde, ich kann es nur von Hand zeichnen, peinlich ~~), schauen Sie sich zuerst das erste foreach an:

Zweites foreach:

Zu diesem Zeitpunkt ist es leicht zu erkennen, dass in der zweiten foreach-Schleife der Wert des letzten Elements im Array vom ersten zum vorletzten Element wirklich veränderbar ist. Es ist sehr einfach: Schneiden Sie die Beziehung zwischen $value und dem zweiten foreach ab. Daher können Sie den Variablennamen deaktivieren oder den Zeiger zurücksetzen (Methode 3). dieser Punkt.

Okay, werfen wir einen Blick auf die Kommentare unter dem offiziellen Dokument. Es sollte leicht zu verstehen sein

<?<span>php
</span><span>$arr1</span> = <span>array</span>("a" => 1, "b" => 2, "c" => 3<span>);
</span><span>$arr2</span> = <span>array</span>("x" => 4, "y" => 5, "z" => 6<span>);

</span><span>foreach</span> (<span>$arr1</span> <span>as</span> <span>$key</span> => &<span>$val</span><span>) {}
</span><span>foreach</span> (<span>$arr2</span> <span>as</span> <span>$key</span> => <span>$val</span><span>) {}

</span><span>var_dump</span>(<span>$arr1</span><span>);
</span><span>var_dump</span>(<span>$arr2</span><span>);
</span>?><span>

The output is</span>:
<span>array</span>(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> &int(6<span>) }
</span><span>array</span>(3) { ["x"]=> int(4) ["y"]=> int(5) ["z"]=> int(6) }
Referenzartikel:

 http://www.cnblogs.com/CraryPrimitiveMan/p/4030748.html#3085766

http://www.jb51.net/article/39299.htm

Das Urheberrecht dieses Artikels liegt beim Autor iforever (luluyrt@163.com). Nach dem Nachdruck des Artikels ist der Autor und der Originaltextlink verboten müssen an deutlich sichtbarer Stelle auf der Artikelseite angegeben werden. Ansonsten behalten wir uns eine rechtliche Haftung vor.

Das Obige hat eine „Grube“ in PHP eingeführt, einschließlich einiger Aspekte davon. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Stellungnahme:
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