Heim >Backend-Entwicklung >PHP-Tutorial >Eine „Grube' in PHP
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, 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.