在PHP数组中出现未定义的索引

3

希望获取多维数组中特定key=>value的计数。我已经有了正确的结果,但是我似乎无法摆脱"Undefined Index"的警告。

$total_arr = array();

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

print_r($total_arr);

有什么想法吗?我已经在 foreach 循环中尝试了 isset,但是没有成功...

可能相关:PHP isset()函数表现异常 - Amal Murali
2个回答

5
$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);

1
如果想要更“简短”的话,可以稍微滥用三元运算符,用以下代码替换整个if / else结构:isset($total_arr[$ar['city']) ? $total_arr[$ar['city']++ : $total_arr[$ar['city'] = 1; - CBroe
"isset" 通常比 "array_key_exists" 更快,并且您永远不必担心这里的 "NULL" 值,因此建议使用 "isset"。 - h2ooooooo
很奇怪,用'isset'替换'array_key_exists'会产生相同的未定义索引错误。感谢解决方案ogres! - Solaris76

3

如果在操作索引之前未初始化它,PHP会抛出该提示。您可以使用@符号来抑制提示,或者使用isset()与一个块一起使用,该块将为您初始化索引值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接