8796 sujets

Développement web côté serveur, CMS

Bonjour

Mon pote qui s'occupe des dévs PHP fait le pont et je me retrouve confronté à une bizzarerie que je ne comprends pas.

Le contexte :
J'ai un tableau temporaire contenant des noms ($table) du genre 0=>Riri 1=>Fifi 2=>Loulou.
J'ai d'autre part une chaine temporaire ($chaine) contenant le nombre de fois que l'un des noms a effectué une certaine action : par exemple 011122 signifie que 0 (Riri) l'a fait une fois, 1 (Fifi) l'a fait 3 fois, et 3 (Loulou) l'a fait 2 fois.

Le but est de lister combien de fois chacun a fait l'action concernée.

Donc
echo '<li> '.substr_count($chaine, '0').'</li>';
	echo '<li> '.substr_count($chaine, '1').'</li>';
	echo '<li> '.substr_count($chaine, '2').'</li>';


affiche bien
- 1
- 3
- 2

Si je récupère les clés du tableau pour incrémenter la valeur de substr_count en comptant le nombre de noms présents,

$compte =count($table);	 
	  $i = '0';
		for($i=0; $i<=($compte-1); $i++) {
		echo '<li>'.substr_count($chaine, $i).'</li>';
		} 


je devrais logiquement obtenir le même résultat puisque je ne fais que remplacer la valeur de clé par $i... mais c'est pas le cas.

Dans mon test en dév (4 noms dont 0 a fait 1 action, 1 a fait 2 actions, 2 a fait 4 actions et 3 a fait 6 actions => $chaine=0112222333333) j'obtiens
- 14
- 2
- 17
- 6

au lieu de
- 1
- 2
- 4
- 6

Depuis le début les résultats des valeurs non-impaires d'utilisateurs (0 et 2) sont fausses alors que la valeurs impaires (1 et 3) restent justes et je ne vois pas pourquoi.
Salut,

Peux-tu mettre ta fonction substr_count() ? Le problème vient sans doute de celle-ci.

Quelques remarques au passage :

- La ligne $i = '0'; est inutile est fausse qui plus est.
- Il vaut mieux mettre $i < $compte au lieu de $i <= $compte - 1, c'est un poil plus rapide.
Salut

substr_count n'est pas une fonction écrite, c'est natif à PHP.
$i < $compte au lieu de $i <= $compte - 1 me rajoute un utilisateur inexistant = ils sont 4 (de 0 à 3) et $compte valant 4 il crée la clé 4 pour un 5ème nom inexistant.
Que te donne un var_dump() de ta variable $table ?
Il semblerait que tu aies plus de 4 entrées dans ton tableau. Je viens d'essayer ce code qui fonctionne parfaitement :

$table  = array( 'riri', 'fifi', 'loulou', 'donald' );
$chaine = '0112222333333';
$compte = count( $table );

for ( $i = 0; $i < $compte; $i++ ) {
   echo '<p>' . substr_count( $chaine, $i ) . '</p>';
}
J'ai compris ! En fait j'avais testé mes utilisateurs commençant à 10,11,12,13, etc. en me disant qu'il pouvait y en avoir plus de 10... Du coup, en l'absence des 10 premiers, ce n'est pas $i mais (10+$i) qu'il faut incrémenter à ce stade. $i ne marche évidemment que si on part de zéro, et en fait je comptais les chiffres de 0 à 9 dans la chaine au lieu de compter les actions... oups.
En tout cas merci de ton aide.
bon w-e
Modifié par Arsene (22 May 2009 - 13:26)