2017-10-20 13 views
-1

J'essaie d'éviter d'utiliser array_count_values ​​(trop lent) pour compter les occurrences, donc j'utilise une boucle foreach mais je reçois toujours ce message d'erreur même si le résultat s'imprime correctement !!!PHP: Quelle est l'erreur dans la boucle foreach?

PHP Notice: Undefined offset: 0 sur la ligne 5 PHP trace Stack:

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

Il imprime correctement malgré tous les messages d'erreur émis:

Array 
(
    [0] => 3 
    [1] => 3 
    [2] => 3 
    [3] => 2 
    [4] => 2 
    [5] => 1 
    [6] => 1 
) 
+3

Eh bien, vous commencez avec un tableau vide, donc il n'y a pas d'index '0' jusqu'à ce que vous le configuriez. –

+1

Ce n'est pas une erreur, c'est seulement un avis. PHP dit "hé, vous essayez d'incrémenter quelque chose qui n'existe pas, donc je vais juste supposer une valeur initiale de 0" - ce qui arrive à être exactement ce que vous voulez. – rickdenhaan

+1

Voir si la clé de tableau existe en premier. Sinon, initialisez-le. – aynber

Répondre

2

L'avis « Undefined offset: 0 " est verbeux, un index n'a pas été défini avant infixe incrément opération (ajout sur place, $<var>++) tandis qu'une affectation régulière ne conduira pas à notice.

Pour supprimer Avis:

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

Pour éviter Avis:

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

La bonne pratique est d'éviter les avis, avertissements, erreurs ..