foreach php,PHP: foreach - Manual

本文详细介绍了PHP中的foreach循环语法,包括两种写法:一种只赋值当前元素,另一种同时赋值键和值。在PHP5及之后的版本中,foreach内部会自动设置数组指针,但在PHP7中不再使用内部指针,直接修改数组元素需要使用引用。文章通过示例演示了如何在循环中直接修改数组元素,以及引用可能导致的问题。还提到了PHP5.5引入的对表达式的支持以及从PHP7开始的多维数组解包特性。
摘要由CSDN通过智能技术生成

foreach

(PHP 4, PHP 5, PHP 7, PHP 8)

Das foreach-Konstrukt bietet eine einfache Möglichkeit

über Arrays zu iterieren. foreach arbeitet nur mit

Arrays und Objekten zusammen und gibt beim Versuch es mit einer

Variablen mit einem anderen Datentypen oder einer nicht initialisierten

Variablen zu benutzen einen Fehler aus. Es gibt zwei

Schreibweisen:

foreach (array_expression as $value)

statement

foreach (array_expression as $key => $value)

statement

Die erste Form durchläuft das in

array_expression angegebene Array.

Bei jedem Durchlauf wird der Wert des aktuellen Elementes der

Variable $value zugewiesen und der interne

Array-Zeiger um eins erhöht (womit im nächsten Durchlauf das

nächste Element betrachtet wird).

Die zweite Form schreibt zusätzlich den Schlüssel des aktuellen

Elementes in jedem Durchlauf in die Variable $key.

Hinweis:

Zu Beginn der Ausführung unter PHP 5 setzt foreach den

internen Arrayzeiger automatisch auf das erste Element des

Arrays zurück. Das bedeutet, dass es nicht notwendig ist vor

einer foreach-Schleife

Da foreach sich unter PHP 5 auf den internen Arrayzeiger

verlässt, kann es zu unerwartetem Verhalten führen, wenn dieser

innerhalb der Schleife verändert wird.

Unter PHP 7 verwendet foreach den internen Arrayzeiger

nicht.

Um Arrayelemente innerhalb der Schleife direkt verändern zu können, muss

dem Variablennamen $value ein & vorangestellt

werden. In diesem Fall wird dieser Variablen eine

Referenz zugewiesen.

$arr= array(1,2,3,4);

foreach ($arras &$value) {$value=$value*2;

}// $arr ist nun array(2, 4, 6, 8)unset($value);// Entferne die Referenz auf das letzte Element?>

Warnung

Die Referenz eines $value auf das letzte Arrayelement

bleiben auch nach der foreach-Schleife bestehen.

Es wird empfohlen, diese durch

$arr= array(1,2,3,4);

foreach ($arras &$value) {$value=$value*2;

}// $arr ist jetzt array(2, 4, 6, 8)

// ohne ein unset($value), bleibt $value weiterhin eine Referenz auf das letzte Element: $arr[3]foreach ($arras$key=>$value) {// $arr[3] wird mit jedem Wert von $arr aktualisiert...echo"{$key}=>{$value}";print_r($arr);

}// bis schließlich der vorletzte Wert in den letzten Wert kopiert wird

// Ausgabe:

// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )

// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )

// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )

// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )?>

Vor PHP 5.5.0 ist eine Referenz auf $value nur dann möglich, wenn

das Array referenzierbar ist (d.h. es ist eine Variable). Der folgende

Code funktioniert erst ab PHP 5.5.0:

}?>

Hinweis:

foreach unterstützt die Fehlerunterdrückung

mittels '@' nicht.

Einige weitere Beispiele, die die Nutzung demonstrieren:

foreach ($aas$v) {

echo"Aktueller Wert von \$a:$v.\n";

}/* foreach Beispiel 2: Werte (mit Schreibweise für Zugriff zur Veranschaulichung) */$a= array(1,2,3,17);$i=0;/* nur zur Veranschaulichung */foreach ($aas$v) {

echo"\$a[$i] =>$v.\n";$i++;

}/* foreach Beispiel 3: Schlüssel und Wert */$a= array("eins"=>1,"zwei"=>2,"drei"=>3,"siebzehn"=>17);

foreach ($aas$k=>$v) {

echo"\$a[$k] =>$v.\n";

}/* foreach Beispiel 4: Mehrdimensionale Arrays */$a= array();$a[0][0] ="a";$a[0][1] ="b";$a[1][0] ="y";$a[1][1] ="z";

foreach ($aas$v1) {

foreach ($v1as$v2) {

echo"$v2\n";

}

}/* foreach Beispiel 5: Dynamische Arrays */foreach (array(1,2,3,4,5) as$v) {

echo"$v\n";

}?>

Entpacken verschachtelter Arrays mit list()

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

PHP 5.5 hat die Fähigkeit hinzugefügt über Arrays von Arrays zu iterieren

und dabei die verschachtelten Arrays in Schleifenvariablen zu entpacken,

indem man ein

For example:

$array= [

[1,2],

[3,4],

];

foreach ($arrayas list($a,$b)) {// $a enthält das erste Element des verschachtelten Arrays

// und $b enthält das zweite Elementecho"A:$a; B:$b\n";

}?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

A: 1; B: 2

A: 3; B: 4

Es können auch weniger Elemente in

$array= [

[1,2],

[3,4],

];

foreach ($arrayas list($a)) {// Beachten Sie, dass es hier kein $b gibt.echo"$a\n";

}?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

1

3

Gibt es nicht ausreichend Elemente im Array, um

$array= [

[1,2],

[3,4],

];

foreach ($arrayas list($a,$b,$c)) {

echo"A:$a; B:$b; C:$c\n";

}?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Notice: Undefined offset: 2 in example.php on line 7

A: 1; B: 2; C:

Notice: Undefined offset: 2 in example.php on line 7

A: 3; B: 4; C:

Changelog

Version

Beschreibung

7.0.0

foreach verwendet den internen Arrayzeiger nicht mehr.

5.5.0

Die Referenzierung von $value wird für Ausdrücke unterstützt.

Zuvor wurden nur Variablen unterstützt.

5.5.0

Das Entpacken verschachtelter Arrays mit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值