2012-12-06 36 views
0

我有两个数组,都具有相同的索引。我想要做的是循环访问一个数组(portConfigArray),并使用第二个数组中的数据更改现有项目的值。 (portStatusArray) 这里的逻辑:试图通过数组循环并重新分配值

$i=0; 
foreach ($portConfigArray as $configentry) 
{   
    $configentry['LinkState'] = $portStatusArray[$i]['LinkState']; 
    $i = $i + 1; 
    echo $configentry['LinkState'];    
} 
$portdetailsArray = $portConfigArray; 
var_dump($portdetailsArray); 

回波语句显示被分配为在portConfigArray每个项的正确的值。 (它只是一个字符串值,如“Up”或“Down”) 但是在var_dump中,我可以看到该值没有被正确更新。它显示

["LinkState"]=> string(0) "" 

作为每个记录的输出。

你能告诉我我做错了什么吗?

回答

1

你需要让$configentry的引用,否则它只是一个副本

foreach ($portConfigArray as &$configentry) 
+0

这可能会炸毁你,因为$ configentry将保留一个引用,直到你unset()它或脚本结束。如果您稍后在脚本中重复使用$ configentry,您将会更改您foreach的最后一个元素,这可能会导致严重的混淆。 –

+0

同意。使用引用时,你应该始终勤奋。 –

1
foreach ($portConfigArray as $configentry) 

应该

foreach ($portConfigArray as &$configentry) 

本质上讲,这意味着实际的价值,而不是它的一个副本的循环交易。

0

虽然可以使$ configentry参考,在其他的答案说,它可能会导致大问题,如果你再用这种“引用“稍后在脚本中用于其他目的的变量。更安全的方法是使用的foreach的密钥=> VAL版本,并直接修改阵列:

foreach($portConfigArray as $key => $configentry) { 
    $portConfigArray[$key] = 'newvalue'; 
} 

参考版本可能导致的问题,例如

php > $a = array('a', 'b', 'c'); 
php > foreach($a as &$val) { $val++; }; 
php > print_r($a); 
Array 
(
    [0] => b 
    [1] => c 
    [2] => d 
) 
php > $b = array('p', 'q', 'r'); 
php > foreach($b as $val) { $val++; }; <--note, $val, not &$val 
php > print_r($b); 
Array 
(
    [0] => p <---hey, these 3 didn't change! 
    [1] => q 
    [2] => r 
) 
php > print_r($a); 
Array 
(
    [0] => b 
    [1] => c 
    [2] => s <---uh-oh! 
) 
php >