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

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

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

作为每条记录的输出。

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

4

3 回答 3

1
foreach ($portConfigArray as $configentry)

应该

foreach ($portConfigArray as &$configentry)

本质上,这意味着循环处理实际值而不是它的副本。

于 2012-12-06T16:57:48.103 回答
1

你需要做$configentry一个参考,否则它只是一个副本

foreach ($portConfigArray as &$configentry)
于 2012-12-06T16:57:53.297 回答
0

虽然您可以使 $configentry 成为引用,如其他答案中所述,但如果您稍后在脚本中将此类“引用”变量用于其他目的,则可能会导致重大问题。更安全的方法是使用 foreach 的 key=>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 >
于 2012-12-06T17:03:05.783 回答