2017-06-26 129 views
1

在下面我將嘗試精確解釋迭代在不同情況下的工作原理。 我不知道爲什麼 將元素添加到數組迭代在foreach語句中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); 

結果

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

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

結果

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 

或更好的問題是什麼的foreach機制在PHP 感謝

回答

0

每一次迭代如果使用REFFERENCE你會得到與以前添加的元素陣列。你可以做下面看看它是如何工作的:

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

基本上通過值的PHP數組進行遍歷時,取數組的副本來遍歷所以它只會做3個循環。如果您通過引用進行迭代,則它會遍歷數組本身,這意味着您所做的更改會反映在循環中。

你的代碼顯示了這口井,還要考慮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); 

打印:

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

當你將它更改爲:

<?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); 

的變化會立即反映在循環,即它打印:

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

請問任何人都可以告訴我什麼是在引擎蓋下運行這些代碼。 – Bagheri

+0

@Bagheri PHP是開源的,用C編寫。如果你認爲你可以處理它,那麼你可以[查看源代碼](https://github.com/php/php-src)。我無法幫助你。 – apokryfos