2012-04-25 54 views
1

我正在嘗試將每個數組上的reviewCount更新爲1.我很困惑爲什麼我的foreach循環不會更新它。任何幫助將不勝感激更新數組中的值

$輸出:

Array(
    [1] => Array(
     [category] => Category 1 
     [country] => USA 
     [date] => 2012-04-07 23:50:49 
     [name] => Product 1 
     [reviewCount] => 
    ) 
    [2] => Array(
     [category] => Category 1 
     [country] => USA 
     [date] => 2012-04-07 23:50:49 
     [name] => Product 1 
     [reviewCount] => 
) 

代碼:

foreach ($output as $row) { 
    $row['reviewCount'] = 1; 
} 

回答

3

它沒有內部$output,因爲你在的一個副本設置審閱計數更新行。請改爲:

foreach ($output as &$row) { // <-- added & 
    $row['reviewCount'] = 1; 
} 

這樣您就可以操作對該行的引用,它對原始行本身具有相同的效果。有關更多詳情,請參閱this page

另一種方式做同樣的(更直觀的可能是,儘管「雪上加霜」技術)將

foreach ($output as $key => $row) { 
    $output[$key]['reviewCount'] = 1; 
} 

你在原始行再次實施這種方式 - 很明顯,因爲你是從它取在數組內手動使用其密鑰。

+0

我很感興趣,它是如何 「雪上加霜」?你能否詳細說明一下? :) – 2012-04-25 09:27:20

+0

@NiftyDude:它執行一個更多的查找。沒什麼問題,所以引用更糟。 – Jon 2012-04-25 09:33:30

0

不使用引用替代辦法:(&

foreach($output as $i => $row) { 
    $output[$i]['reviewCount'] = 1; 
}