Heim  >  Artikel  >  Backend-Entwicklung  >  PHP: Detaillierte Erläuterung der Verwendungsbeispiele für foreach und in_array

PHP: Detaillierte Erläuterung der Verwendungsbeispiele für foreach und in_array

伊谢尔伦
伊谢尔伦Original
2017-06-23 14:42:282095Durchsuche

PHP ist in der Entwicklung sehr effizient, was verständlich ist, aber es geht zu Lasten der Ausführungseffizienz. PHP-Array ist sehr leistungsfähig, aber Sie sollten es auch genauer betrachten und für alle Fälle mehrere Situationen ausprobieren. Wenn Sie mehr finden, werden wir hier kurz darauf eingehen füge sie hinzu!

1. foreach bietet eine einfache Möglichkeit, das Array zu durchlaufen, mit dem der Inhalt von Daten oder Objekten leicht gelesen werden kann, aber in der offiziellen Dokumentation heißt es: Da foreach auf einem internen Array-Zeiger basiert, kann das Ändern seines Werts in einer Schleife zu unerwartetem Verhalten führen. Also grundsätzlich:
1. Versuchen Sie nicht, den Wert innerhalb der Schleife zu ändern, da das Ergebnis sonst über das gewünschte hinausgeht.
2 ist eine sichere Methode, obwohl sie selten verwendet wird Bei Verwendung sollte die unset-Funktion jedoch sofort nach dem Ende der Referenz aufgerufen werden, um die Variable zu zerstören. Andernfalls wird der letzte Wert der Schleife geändert, sodass unerwartete Werte auftreten ​Beispiel: Wenn die Liste durchgeschleift wird, enthält die letzte Ausgabezeile viele chaotische Werte oder Nullwerte. Die Verwendung von unset löst dieses Problem.

Sehen wir uns ein Beispiel an

<?php 
/*-------------------------------------------------------------------------*/ 
/* foreach example 1: value only */ 
echo "foreach example 1: value only ".&#39;<br />&#39;; 
$a = array(1, 2, 3, 17); 
foreach ($a as $v) { 
echo "Current value of ".$a.":". $v."<br />"; 
} 
?> 
// 运行结果 
foreach example 1: value only 
Current value of $a: 1 
Current value of $a: 2 
Current value of $a: 3 
Current value of $a: 17

2. in_array,Die Bedeutung besteht darin, das vorherige Ob die Zeichenfolge im letzteren Array vorhanden ist, und in den meisten Fällen funktioniert es auch so, aber wenn das letztere Array eine Ganzzahl ist, wie etwa array(0,1,2,3) , Es liegt ein Problem vor. PHP intvaliert die vorherige Zeichenfolge und erhält den Wert 0. Wenn Ihr Array also zufällig diesen Wert hat, wird die Gleichung erstellt. Liegt sie über den Erwartungen?

Wenn also festgestellt wird, dass die folgenden Daten eine Ganzzahl sind, insbesondere wenn sie 0 sind (dies kann alle Zeichenfolgen ersetzen), dürfen Sie diese Funktion nicht erneut verwenden. Sie können dies tun Verwenden Sie stattdessen key_exists, aber die nachfolgenden Daten müssen mit

array_flip umgekehrt werden.

Schauen wir uns noch einmal ein Beispiel an

function search($keyWord, $stack) {//此处判断是应该更新还是插入

      foreach ($stack as $key => $val) {

        if (in_array($keyWord, $val)) {

          return TRUE;

        }

      }

      return FALSE;

    }
Was passiert, wenn ein String als Array verwendet wird, um Werte zu erhalten? PHP ist eine sehr fehlertolerante Sprache. Sie wird ihr Bestes geben, um Ihnen bei der Korrektur Ihrer Fehler zu helfen, sodass Sie Ihren Referenzindex intelligent in eine Ganzzahl umwandeln. Dann ist der String-Index 0 und der Wert ist Sie wird den Wert der ersten Zeichenfolge erhalten. Liegt er über Ihren Erwartungen? Die Lösung besteht darin, zu bestätigen, ob die Variable ein Array ist, bevor auf den Index is_array verwiesen wird.

3. Probleme beim Verweisen auf Variablen in foreach

Ich schreibe seit vielen Jahren PHP, aber ich bin immer noch auf einen gestoßen foreachDas Problem beim Verweisen auf die -Variable in >, die PHP-Version ist 5.6.12. Der Code lautet wie folgt:

<?php
$arr = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;];
foreach ($arr as $i=>&$a) {
  $a = $a.&#39;_&#39;. $a;
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
foreach ($arr as $i=>$a) {
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
print_r($arr);
Ausgabeergebnis

Als ich anfing, das Ausgabeergebnis des zweiten foreach zu sehen, war ich sehr verwirrt. Wie konnten zwei d_d ausgegeben werden?

Nach sorgfältiger Überlegung stellt sich heraus, dass der Gültigkeitsbereich von $a in PHP foreach die lokale Variable der gesamten

-Funktion außerhalb von ist Schleife ist weiterhin gültig und nicht in eine Schleife eingeschlossen,

also ist $a beim Ausführen des zweiten foreach keine neue Variable, sondern zeigt immer noch auf $arr

array5 Die Adressreferenz des Elements,

Wenn sich das zweite foreach in einer Schleife befindet, weist es tatsächlich ständig Werte dem fünften Element des $arr-Arrays zu,

Spezifische Zuweisungssituation,

Das erste Mal: ​​a_a wird dem 5. Element zugewiesen, das Ergebnis ist: [a_a, b_b, c_c, d_d,a_a]

Das zweites Mal Das dritte Mal: ​​b_b wird dem 5. Element zugewiesen, das Ergebnis ist: [a_a, b_b, c_c, d_d,b_b]

Das dritte Mal: ​​c_c wird dem 5. Element zugewiesen, das Ergebnis ist : [a_a, b_b, c_c, d_d,c_c]

Das vierte Mal: ​​d_d wird dem 5. Element zugewiesen, das Ergebnis ist: [a_a, b_b, c_c, d_d,d_d]

Das fünfte Mal: ​​zu diesem Zeitpunkt Da das fünfte Element zu d_d geworden ist und d_d dem fünften Element neu zugewiesen wurde, ist das Ergebnis immer noch: [a_a, b_b, c_c, d_d,d_d]

Lösung:

1.尽量不使用相同的循环变量名

2.每次使用完或再次使用前进行 unset($a); 处理,解除地址应用

还是用上面代码示例:

$arr = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;];
foreach ($arr as $i=>&$a) {
  $a = $a.&#39;_&#39;. $a;
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
echo $a;
echo &#39;<hr>&#39;;

// 这里 unset 掉
unset($a);

echo $a = &#39;ccc&#39;;
echo &#39;<hr>&#39;;
print_r($arr);
echo &#39;<hr>&#39;;
foreach ($arr as $i=>$a) {
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
print_r($arr);

输出结果:

现在就正常了,这些小细节一定要注意了。

Das obige ist der detaillierte Inhalt vonPHP: Detaillierte Erläuterung der Verwendungsbeispiele für foreach und in_array. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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