2012-11-01 14 views
2

我正在處理另一個開發人員舊代碼,並且有大量的注意:使用+ =運算符設置數據時發生未定義的索引錯誤。本質上,索引尚未在數組中設置,因此會生成錯誤。使用加等號運算符時未定義的索引錯誤

實施例:

$myArray = array(); 
$myValue = 1; 
for ($i = 1; $i <= 10; $i++) 
{ 
    $myArray['test'] += 1; 
} 

將在第一次運行產生錯誤,因爲測試索引尚未設定。

我知道我可以用下面的代碼刪除此錯誤:

$myArray = array(); 
$myValue = 1; 
for ($i = 1; $i <= 10; $i++) 
{ 
    if (! isset($myArray['test'])) 
    { 
     $myArray['test'] = $myValue; 
    } 
    else 
    { 
     $myArray['test'] += $myValue; 
    } 
} 

不過,也有圍繞這樣的事情來改變50。是否值得編寫所有這些isset語句或者有沒有更好的方式我不知道?

編輯:我應該注意,數組索引並不總是相同的,有時沒有設置,所以我不能在這種情況下預設索引,以避免錯誤。

+0

它是一個選項,供您只需關閉PHP通知? – luttkens

+0

生產服務器上的所有錯誤均已關閉。在我的開發服務器上編輯某些東西后,我只注意到這些錯誤。那麼可以忽略這些嗎? – bobcat

+0

'array_key_exists' +'isset'如果你想這樣做真正的硬核方式;) – clentfort

回答

5

這有點短,但如果您有很多編輯,可能仍然有點複雜。

$myArray = array(); 
$myValue = 1; 
for ($i = 1; $i <= 10; $i++) 
{ 
    isset($myArray['test']) ? $myArray['test'] += $myValue : $myArray['test'] = $myValue; 

} 

你也可以寫一個全局函數(未測試)..

$myArray = array(); 
$myValue = 1; 
for ($i = 1; $i <= 10; $i++) 
{ 
    increment($myArray['test'], $myValue); 
} 

function increment(&$var, $inc){ 
    $var = isset($var) ? $var += $inc : $var = $inc 
} 
+0

謝謝,這似乎很簡單,它值得重寫一切。 – bobcat

0

舊/ Deprecaded /不推薦的,但最短的解決方案是

@$myArray['test'] += $myValue;