Page 1 sur 2
Problème de compteur
Posté : 22 juin 2016, 12:44
par Weezy
Bonjour à tous,
Je dispose d'un tableau avec 10 éléments (10 lignes hors entête) mais lorsque je fait un count() ou bien une boucle foreach cela me renvoi une valeur supérieur à la valeur attendu.
voici mon tableau:
Array (
[nom] => Array (
[0] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[a] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
=> Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
)
Voici mon code:
foreach ($array as $ligne => $column) {
foreach ($column as $value) {
$i++;
}
}
echo $i;
echo count ($array);
Au lieu de me renvoyé 11 cela me renvoi 30 pour $i et 3 pour le count ($array)
J
Il faudrait compter le nombre de ligne mais je ne vois pas comment m'y prendre.
Merci d'avance pour votre aide

Re: Problème de compteur
Posté : 22 juin 2016, 13:42
par Spols
le plus simple serait de faire un count($array['nom']); pour autant que l'index est toujours 'nom' et que cette "colonne" est représentative.
Re: Problème de compteur
Posté : 22 juin 2016, 14:42
par Ryle
Bonjour,
Ton problème vient du fait que tu incrémentes ta variable $i pour chaque élément de chacun de tes tableaux (2 foreach imbriqués) et que tu affiche le résultat à la fin, donc après avoir cumulé le nombre d'éléments de chacun de tes tableaux... Tu comptes donc les éléments de 3 tableaux contenant 10 éléments chacun, le résultat final est bien 30
La fonction count() te retourne le nombre d'élément du tableau spécifié, mais ne vérifie pas si les éléments sont eux même des tableaux..
Difficile de te donner une solution ne sachant pas ce que tu veux faire... tu peux essayer des trucs du genre :
foreach ($array as $ligne => $column) {
$i = 0;
foreach ($column as $value) {
$i++;
}
echo $i . " <br />";
}
foreach ($array as $ligne => $column) {
echo count($column) . " <br />";
}
Re: Problème de compteur
Posté : 23 juin 2016, 10:06
par Weezy
Je veux connaître le nombre de ligne de mon tableau afin de le parcourir et de récupérer par exemple les valeurs comprises entre les 10% des premières valeurs et 30% des dernières et de les ranger dans un nouveau tableau.
Merci pour VOS réponses

Re: Problème de compteur
Posté : 23 juin 2016, 12:39
par Ryle
C'est pas très clair... peut être que ceci pourra t'aider à y voir plus clair :
echo "Ton tableau comporte " . count($array) . " colonnes<br />";
$nbLigneMax = 0;
foreach ($array as $column => $lines) {
echo "La colonne " . $column . " comporte " count($lines) . " lignes<br />";
$nbLigneMax = max($nbLigneMax, count($lines) );
}
echo "La colonne la plus longue comporte " . $nbLigneMax . " lignes.";
Re: Problème de compteur
Posté : 23 juin 2016, 12:48
par Weezy
Pour être plus claire:
j'ai un tableau de 50 lignes.
10% des premières lignes de mon tableau=les 5 premières lignes
30% des dernières lignes=15 dernières lignes
En gros je veux récupérer toute les lignes sauf les 5 premières et 15 dernières.
Re: Problème de compteur
Posté : 23 juin 2016, 13:59
par Aureusms

Hmmm et que fais-tu des tableaux dans tes lignes ?
Je ne comprend pas trop ce que tu veux mais essayes cela :
<?php
$nbLigne = count($array);
$tabLimite = array ("min" => 15, "max" => 70);
$count = 0;
$l1 = 0;
foreach ($array as $cle => $valeur) :
$l1++;
if ($l1 > $tabLimite["min"]*$nbLigne/100 && $l1 < $tabLimite["max"]*$nbLigne/100) {
$count++;
//si tu veux compter les lignes de tableau supplémentaire c'est ici :
if (is_array($valeur)) {
$li2 = 0;
$nbLigne2 = count($valeur);
foreach ($valeur as $cle2 => $valeur2) :
$l2++;
if ($l2 > $tabLimite["min"]*$nbLigne2/100 && $l2 < $tabLimite["max"]*$nbLigne2/100)
$count++;
endforeach;
}
}
endforeach;
echo "Nombre de Ligne : ".$nbLigne."<br />";
echo "Nombre en tout : ".$count;
?>
Re: Problème de compteur
Posté : 23 juin 2016, 14:12
par Ryle
Ok, donc si ton tableau a la forme indiquée ci-dessus, et que chaque colonne a le même nombre de ligne, tu peux déterminer celui-ci en comptant les lignes de ta première colonne avec count($array['nom'])
$nbLignes = count($array['nom']);
$compteur = 0;
foreach ($array as $column => $line) {
$compteur++;
if ($compteur < $nbLignes *10/100) // on saute les premiers 10%
continue;
if ($compteur >= $nbLignes *70/100) // on arrête avant les derniers 30%
break;
// traitement ...
}
Re: Problème de compteur
Posté : 23 juin 2016, 14:27
par Aureusms
C'est plus propre en effet.
Re: Problème de compteur
Posté : 23 juin 2016, 16:00
par Weezy
Je ne vois pas comment je peux récupérer les valeurs dans un tableau.
$compteur = 0;
foreach ($array as $column => $line) {
$compteur++;
if ($compteur < $nbLigne *10/100) // on saute les premiers 10%
continue;
if ($compteur/$nbLigne) *100 >= $nbLigne *70/100) // on arrête avant les derniers 30%
break;
$NewArray[line]=$array[line];
}
Re: Problème de compteur
Posté : 23 juin 2016, 17:17
par Ryle
Un truc comme ça ?
$compteur = 0;
$NewArray = array();
foreach ($array as $column => $line) {
$compteur++;
if ($compteur < $nbLigne *10/100) // on saute les premiers 10%
continue;
if (($compteur/$nbLigne) *100 >= $nbLigne *70/100) // on arrête avant les derniers 30%
break;
$NewArray[] = $line;
}
print_r($NewArray);
j'ai ajouté une parenthèse manquante, mais je suis pas sûr de ton $compteur/$nbLigne) *100 par contre...
Re: Problème de compteur
Posté : 24 juin 2016, 10:15
par Weezy
NE fait pas attention au $compteur/$nbLigne) *100 c'est une bêtise de ma part.
Mais par contre quand je lance le code ci-dessus j'ai cette erreur qui s'affiche: "NetworkError: 500 Internal Server Error -
http://127.0..../monfichier.php"
Re: Problème de compteur
Posté : 24 juin 2016, 10:36
par Weezy
oft j'avais oublié un ";"

Re: Problème de compteur
Posté : 24 juin 2016, 10:42
par Weezy
Voila ce que renvoi print_r (NewArray):
Array (
[0] => Array (
[0] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[1] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
[2] => Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
)
Tableau de départ:
Array (
[nom] => Array (
[0] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[a] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
=> Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
)
On remarque qu'il manque juste la première ligne des entêtes (alors que cette ligne devrait être présente dans le nouveau tableau).
$NewArray devrait ressembler à ça:
Array (
[nom] => Array (
[0] => D [2] => B [3] => E [4] => A [5] => D [6] => B )
[a] => Array (
[0] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 )
=> Array (
[0] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 )
)
Re: Problème de compteur
Posté : 24 juin 2016, 10:59
par Ryle
C'est plus clair avec un exemple
Est-ce que quelque chose comme ça conviendrait ?
$newArray = array();
$nbLignes = count($array['nom']);
foreach ($array as $column => $lines) {
$compteur = 0;
$newArray[$column] = array();
foreach ($lines as $id => $val) {
$compteur++;
if ($compteur < $nbLignes *10/100) // on saute les premiers 10%
continue;
if ($compteur >= $nbLignes *70/100) // on arrête avant les derniers 30%
break;
$newArray[$column][$id] = $val;
}
}