2017-10-20 73 views
-1

我试图避免使用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 
) 
+3

那么,你是从一个空数组开始的,所以在你设置它之前没有'0'索引。 –

+1

这不是一个错误,它只是一个通知。 PHP说:“嘿,你试图增加一些不存在的东西,所以我只是假设初始值为0” - 这正好是你想要的。 – rickdenhaan

+1

查看数组键是否先存在。如果不是,则初始化它。 – aynber

回答

2

通知“未定义抵消: 0“是详细的,某些索引未设置之前中缀增量操作(就地添加,$<var>++),而定期任务不会导致通知

为了抑制通知

... 
@$frequency[$val]++; 

为了避免通知

... 
$frequency[$val] = (isset($frequency[$val]))? $frequency[$val]+1 : 1; 

做法是避免通知,警告,错误.. 。

相关问题