2013-10-24 16 views
3

尋找在多維數組中獲得特定key =>值的計數。我有工作,即結果是正確的,但我似乎無法擺脫未定義的指數通知。未定義的PHP數組中的索引

$total_arr = array(); 

foreach($data['user'] as $ar) { 
    $total_arr[$ar['city']]++; 
} 

print_r($total_arr); 

任何想法?我已經嘗試過foreach循環內的isset,但沒有快樂......

+0

可能有關:[PHP'isset()函數'函數行爲不端(http://stackoverflow.com/a/17330752/1438393) –

回答

4
$total_arr = array(); 

foreach($data['user'] as $ar) { 
    if(array_key_exists($ar['city'],$total_arr) { 
     $total_arr[$ar['city']]++; 
    } else { 
     $total_arr[$ar['city']] = 1; // Or 0 if you would like to start from 0 
    } 
}  

print_r($total_arr); 
+0

正確答案。如果有人希望這個「短一點」,也可以稍微誤用三元運算符,並用'isset($ total_arr [$ ar ['city'])'替換整個if/else結構? $ total_arr [$ ar ['city'] ++:$ total_arr [$ ar ['city'] = 1;' – CBroe

+0

'isset'通常總是比'array_key_exists'更快,並且您永遠無需擔心NULL '值在這裏,所以請用'isset'代替。 – h2ooooooo

+0

奇怪的是,將'array_key_exists'替換爲'isset'會產生相同的未定義索引錯誤。感謝解決方案食人魔! – Solaris76

3

如果您的索引在被操作之前尚未初始化,PHP將會發出通知。要麼使用@符號來取消通知,要麼使用isset()與將爲您初始化索引值的塊結合使用。