2015-09-26 58 views
0

我發現自己做了以下頗有幾分:PHP初始化,如果沒有設置

if (isset($objs[$key]){ 
    $objs[$key] += val; 
} else { 
    $objs[$key] = $val; 
} 

有沒有更好的方式來做到這一點? 另一種方式可以是:

$objs[$key] = isset($objs[$key]) ? $objs[$key] + $val : $val 

有沒有更好的辦法?

+0

我剛剛發現一個非常相關的問題:http://stackoverflow.com/questions/308835/is-it-good-practice-to-initialize-the-elements-in-an-associative-array-in-php ?RQ = 1 – ajon

回答

1

簡化的最簡單方法可能是通過引用來取數組並重復刪除代碼。

如果你正在使用PHP 7,您還可以使用新的??操作(假設所有值均爲整數):

$arr[$key] = ($arr[$key] ?? 0) + $value; 

但是,如果你知道數組的形狀,你應該立足自己的行爲那。在這種情況下使用array_fill_keys創建數組或類似。

1

如果你總是添加數字......你可以做這樣的事情來爲每個條目保留一行代碼,這對你現有的解決方案來說可能會或可能不會更好。

$objs = array(); 

addvalue($objs, "dog", 2); 
addvalue($objs, "dog", 5); 
// $objs['dog'] will = 7 

function addvalue(& $var, $key, $value){ 
    if (isset($var[$key])){ 
     $var[$key] += $value; 
    } else { 
     $var[$key] = $value; 
    } 
}