PHP:foreach循环中的错误是什么?
问题描述:
我试图避免使用array_count_values(太慢)来计算出现次数,所以我使用了一个foreach循环,但我仍然收到以下错误消息,即使结果打印正确!PHP:foreach循环中的错误是什么?
PHP公告:未定义抵消:0在第5行 PHP堆栈跟踪:
$somearray=array(0,1,2,3,4,5,6,0,1,2,3,4,0,1,2);
$frequency=array();
foreach($somearray as $key => $val) {
$frequency[$somearray[$key]]++; //THIS IS LINE 5
}
print_r($frequency);
它正确打印尽管所有抛出的错误消息:
Array
(
[0] => 3
[1] => 3
[2] => 3
[3] => 2
[4] => 2
[5] => 1
[6] => 1
)
答
通知“未定义抵消: 0“是详细的,某些索引未设置之前中缀增量操作(就地添加,$<var>++
),而定期任务不会导致通知。
为了抑制通知:
...
@$frequency[$val]++;
为了避免通知:
...
$frequency[$val] = (isset($frequency[$val]))? $frequency[$val]+1 : 1;
的好做法是避免通知,警告,错误.. 。
那么,你是从一个空数组开始的,所以在你设置它之前没有'0'索引。 –
这不是一个错误,它只是一个通知。 PHP说:“嘿,你试图增加一些不存在的东西,所以我只是假设初始值为0” - 这正好是你想要的。 – rickdenhaan
查看数组键是否先存在。如果不是,则初始化它。 – aynber