Heim >Backend-Entwicklung >PHP-Tutorial >PHP: Detaillierte Erläuterung der Verwendungsbeispiele für foreach und in_array
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 ".'<br />'; $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?
array_flip umgekehrt werden.
Schauen wir uns noch einmal ein Beispiel anfunction 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 = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; 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?
-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 $arrarray5 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 = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; echo $a; echo '<hr>'; // 这里 unset 掉 unset($a); echo $a = 'ccc'; echo '<hr>'; print_r($arr); echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; 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!