0

同じインデックスを持つ 2 つの配列があります。私がやりたいことは、配列の 1 つ (portConfigArray) をループし、2 番目の配列のデータを使用して既存のアイテムの値を変更することです。(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 に答える