2014-01-11 47 views
0

在我的項目中,增加了firstArray + 3的值。增加secondArray +7的值後。PHP中增加數組值的問題

$firstArray = array(
     'a' => 1, 
     'b' => 3, 
     'c' => 5, 
    ); 

foreach ($firstArray as &$item) { 
    $item += 3; 
} 
print_r($firstArray); 

結果:Array ([a] => 4 [b] => 6 [c] => 8)

$secondArray = array(
    'a' => 11, 
    'b' => 13, 
    'c' => 17, 
); 

foreach ($secondArray as $key=>$item) { 
    $secondArray[$key] += 7; 
} 

print_r($secondArray); 

結果:Array ([a] => 18 [b] => 20 [c] => 24)

但是問題是,當我確實print_r($firstArray) again;我有這樣的結果: 陣列([α] => 4 [b] => 6 [c] => 17)

爲什麼在結果fisrt和thisrd上有差異?

+0

從哪裏得到結果:Array([a] => 12 [b] => 22 [c] => 32) –

+0

這個所有的代碼在一個php頁面中,這個所有2個循環 – user2984590

+0

被編輯。我貼上了錯誤的解決方案,對不起。 – user2984590

回答

1

問題是,您使用$ item 作爲鏈接,並且在一次循環之後,您再次使用它(我認爲重用$ item後,某些值被重寫)。您需要在第一次循環後取消設置($ item),甚至在使用它們之後alwas未設置鏈接。

$firstArray = array(
    'a' => 1, 
    'b' => 3, 
    'c' => 5, 
); 

foreach ($firstArray as &$item) { 
    $item += 3; 
} 
print_r($firstArray); 

unset($item); 

現在結果是好的

1

你可以使用array_map代替循環和傳遞通過引用。這樣避免突變。例如:

$add = function($x) { 
    return function($y) use($x) { 
    return $x + $y; 
    }; 
}; 

$firstArray = array_map($add(3), $firstArray); 
$secondArray = array_map($add(7), $secondArray); 
$add = function($x) { 
    return function($y) use($x) { 
    return $x + $y; 
    }; 
}; 

$firstArray = array_map($add(3), $firstArray); 
$secondArray = array_map($add(7), $secondArray); 
+0

是的,但它不是我的問題的答案 – user2984590

+0

其他答案有解決您的特定問題;這是一種替代解決方案。 – elclanrs