[RESOLU] Problème de compteur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème de compteur

Re: Problème de compteur

par Weezy » 24 juin 2016, 13:25

Après plusieurs recherches je suis tombé sur la fonction array_slice() qui éxtrait une portion de tableau (http://php.net/manual/fr/function.array-slice.php) et c'est beaucoup plus simple.
Voila comment j'ai procédé et cela fonctionne :D :
//Comtpe le nombre de ligne
foreach ($array as $lines) {
        $nbLigne=count($lines);
}

foreach ($array as $column => $line) {
    $NewArray[]=array_slice($line, $nbLigne*(10/100), $nbLigne*(70/100)-1);
}

Re: Problème de compteur

par Weezy » 24 juin 2016, 12:02

Je pence qu'il faut utiliser la fonction array_slice()

Re: Problème de compteur

par Weezy » 24 juin 2016, 11:10

Voila ce que ça donne: :?
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] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[2] => Array (
[0] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[3] => Array (
[0] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[4] => Array (
[0] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[5] => Array (
[0] => A [1] => D [2] => B [3] => E [4] => A [5] => D [6] => B [7] => E [8] => A [9] => D )
[6] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
[7] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
[8] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
[9] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
[10] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
[11] => Array (
[0] => 3 [1] => 4 [2] => 6 [3] => 5 [4] => 3 [5] => 3 [6] => 6 [7] => 5 [8] => 4 [9] => 6 )
[12] => Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
[13] => Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
[14] => Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
[15] => Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
[16] => Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
[17] => Array (
[0] => 5 [1] => 4 [2] => 5 [3] => 5 [4] => 3 [5] => 4 [6] => 5 [7] => 6 [8] => 4 [9] => 5 )
)

Re: Problème de compteur

par Ryle » 24 juin 2016, 10:59

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;
	}
}

Re: Problème de compteur

par Weezy » 24 juin 2016, 10:42

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

par Weezy » 24 juin 2016, 10:36

oft j'avais oublié un ";" :?

Re: Problème de compteur

par Weezy » 24 juin 2016, 10:15

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

par Ryle » 23 juin 2016, 17:17

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

par Weezy » 23 juin 2016, 16:00

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

par Aureusms » 23 juin 2016, 14:27

C'est plus propre en effet.

Re: Problème de compteur

par Ryle » 23 juin 2016, 14:12

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

par Aureusms » 23 juin 2016, 13:59

:-k 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

par Weezy » 23 juin 2016, 12:48

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

par Ryle » 23 juin 2016, 12:39

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

par Weezy » 23 juin 2016, 10:06

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 :)