2017-06-26 2 views
1

Im folgenden werde ich versuchen, genau zu erklären, wie Iteration in den verschiedenen Fällen funktioniert. Ich frage mich, warum Element zum Array hinzufügen iteriert in foreach Anweisung in PHP

$arr=[1,2,3]; 
    $count=0; 
    foreach ($arr as $value){ \\ 
     echo "$value\n"; 
     if ($count++<10) $arr[]=$value+1; \\add new element 
    } 
    print_r($arr); 

Ergebnisse in

1 
2 
3 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 2 
    [4] => 3 
    [5] => 4 
) 

während

$arr=[1,2,3]; 
    $count=0; 
    foreach ($arr as &$value){ \\reference elemnt 
     echo "$value\n"; 
     if ($count++<10) $arr[]=$value+1; 
    } 
    print_r($arr); 

Ergebnisse in

1 
2 
3 
2 
3 
4 
3 
4 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 2 
    [4] => 3 
    [5] => 4 
    [6] => 3 
    [7] => 4 

)

oder bessere Frage, was foreach Mechanismus in PHP ist dank

Antwort

0

Jede Iteration Sie Array mit dem vorherigen hinzugefügt Elemente erhalten, wenn Sie refference verwenden. Sie können folgende sehen Sie, wie es funktioniert:

$arr=[1,2,3]; 
$count=0; 
foreach ($arr as &$value){ 
    if ($count++<10) $arr[]=$value+1; 
    print_r($arr); 
} 
0

Grundsätzlich, wenn sie von Wert PHP nimmt eine Kopie des Arrays durch ein Array iterieren iterieren, so dass es nur drei Schleifen zu tun. Wenn Sie per Referenz iterieren, iteriert es über das Array selbst, was bedeutet, dass Änderungen, die Sie vornehmen, sich in der Schleife widerspiegeln.

Ihr Code zeigt dies auch, aber auch this code

<?php 
$arr=[1,2,3]; 
$count=0; 
foreach ($arr as $index => $value){ // 
    if (isset($arr[$index+1])) { 
     $arr[$index+1]++; 
    } 
    echo "$value\n"; 
} 
print_r($arr); 

Drucke betrachten:

<?php 
$arr=[1,2,3]; 
$count=0; 
foreach ($arr as $index => &$value){ // 
    if (isset($arr[$index+1])) { 
     $arr[$index+1]++; 
    } 
    echo "$value\n"; 
} 
print_r($arr); 

Die Änderungen werden sofort auf das reflektierte:

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

Wenn Sie es ändern Schleife, dh es druckt:

1 
3 
4 
Array 
(
    [0] => 1 
    [1] => 3 
    [2] => 4 
) 
+0

könnte mir bitte jemand sagen, was unter der Haube über diese Codes läuft. – Bagheri

+0

@Bagheri PHP ist Open Source und in C geschrieben. Wenn Sie denken, dass Sie damit umgehen können, dann können Sie [die Quelle auschecken] (https://github.com/php/php-src). Ich kann dir damit nicht helfen. – apokryfos