Enregistré les valeurs de ma boucle dans un tableau

Petit nouveau ! | 5 Messages

26 mai 2010, 14:44

Bonjour

Contexte:

j'ai stocké des chaines de caractères dans une base de donnée
une chaine de caractère représente une séance d'entrainement d'un pilote.
ces chaines peuvent varié en nombre de caractère selon le nombre de tour que fait le pilote , mais sera toujours de la même forme .

exemple 1:

(1, 129.585, 1:33.439)Lap=(2, 223.024, 1:22.517)Lap=(3, 305.540, 1:21.795)Lap=(6, 860.873, 1:23.452)Lap=(8, 1235.883, 1:36.214)Lap=(9, 1332.096, 1:22.408)Lap=(10, 1414.504, 1:22.561)Lap=(11, 1497.065, 1:26.489)Lap=(12, 1583.554, 1:21.635)Lap=(13, 1665.190, 1:21.870)Lap=(14, 1747.060, 1:21.792)

exemple 2:
(1, 789.434, 1:22.789)Lap=(3, 1148.026, 1:23.423)Lap=(4, 1231.449, 1:38.917)Lap=(5, 1330.366, 1:32.218)Lap=(6, 1422.584, 1:21.602)Lap=(8, 1685.208, 1:21.611)Lap=(9, 1766.818, 1:21.958)


Définitions:
Lap=(3, 1148.026, 1:23.423)Représente un tour chronométré
3 =>Est le tour chronométré n°3
1148.026 => Est l'instance en seconde du tour n°3 (Cette information ne m' interresse pas)
1:23.423 =>Est le temps en minute pour le tour n°3

Projet:

Je dois cherché toutes les séries de trois tour consécutif dans une chaine
=>calculé la moyenne des series
=>ne retenir que la plus basse des moyenne ainsi que les tour qui y ont contribué.

schéma:

chaine=(1, 129.585, 1:33.439)Lap=(2, 223.024, 1:22.517)Lap=(3, 305.540, 1:21.795)Lap=(6, 860.873, 1:23.452)Lap=(8, 1235.883, 1:36.214)Lap=(9, 1332.096, 1:22.408)Lap=(10, 1414.504, 1:22.561)Lap=(11, 1497.065, 1:26.489)Lap=(12, 1583.554, 1:21.635)Lap=(13, 1665.190, 1:21.870)Lap=(14, 1747.060, 1:21.792)

tour consécutif=
série 1=>1.2.3
série 2=>8.9.10
série 3=>11.12.13

moyenne des séries en seconde:

série 1=>1.2.3=(93.439+82.517+81.795)/3=85.917 secondes
série 2=>8.9.10=(96.214+82.408+82.521)/3=87.0476 secondes
série 3=>11.12.13=(86.489+81.635+81.870)/3=83.331 secondes

recherché la moyenne la plus basse la remettre en minutes ,seconde ainsi que ces valeurs:

dans notre cas :
$meilleuremoyenne =83.331 =>1.23.331
infos de la meilleure moyenne=
$temps1=lap11
$chrono1= 1.26.489
$chrono2=1.21.635
$chrono3=1.21.870

reinjecté toutes ces valeurs dans la base.

Problème:

je ne sais pas comment je pourrais enregistré les valeurs qui remplissent les conditions dans un tableau.

L'affichage pour un tour de boucle qui répond aux conditions devra être de cette forme:

Moyenne : ..:..'... en minute
pour les tours:
numéro du tour:...
temps du tour:..:..'... en minute
numéro du tour:...
temps du tour:..:..'... en minute
numéro du tour:...
temps du tour:..:..'... en minute

Voici une parie du code :
while ($lecture = mysql_fetch_assoc($result)){ /* $lecture['Times'] affiche (1, 129.585, 1:33.439)Lap=(2, 223.024, 1:22.517)Lap=(3, 305.540, 1:21.795)Lap=(6, 860.873, 1:23.452)Lap=(8, 1235.883, 1:36.214)Lap=(9, 1332.096, 1:22.408)Lap=(10, 1414.504, 1:22.561)Lap=(11, 1497.065, 1:26.489)Lap=(12, 1583.554, 1:21.635)Lap=(13, 1665.190, 1:21.870)Lap=(14, 1747.060, 1:21.792) */
	$i++;
	
	$string =$lecture['Times'];
		preg_match_all('#(?<=Lap\=|^)\((\d+), (\d+(?:\.\d+)?), (\d+:\d{2}\.\d{3})\)#iU', $string, $tour);


 	        echo "<pre>";
	        print_r($tour);
	        echo "</pre>";
		foreach($tour[3] AS $cle=>$valeur)							
		echo "<br><b>----------------------------------------------- </b><br>";
	        $precedent1=-5;  // le tour précédent
	        $precedent2=-5;  // le tour précédent du précédent
	        $count=1;        // le nombre de tour consécutifs effectué

  	        foreach($tour[1] AS $clef=>$valeur)
         	{
		if($valeur-1==$precedent1) // si le tour suis le précédent on incrémente le compteur
		{
									
		$count++;
		}
		else // sinon on le remet à 1
		{
		$count=1;
		}
		if($count==3) // quand on à 3 tours consécutifs, on affiche le résultat
		{
		$count=1;
															
									
		$t1=$precedent2;
		$t2=$precedent1;
		$t3=$clef;
																		
		$Cmoyenne=(($temps_centieme)+($temps_centieme)+($temps_centieme))/3; // ici ton calcule pour avoir la moyenne
		$moyenne=convert_temps($Cmoyenne);
		echo "<b> Moyenne </b> : ",$moyenne,"<br />";
		echo "tour : ", $precedent2," temps : ",$tour[3][$t1],"<br />";
		echo "tour : ", $precedent1,"temps :",$tour[3][$t2],"<br />";
		echo "tour : ", $valeur,"temps :",$tour[3][$t3],"<br />";
									
	        }
               // on met à jours les variables précédent2 et 1
	       $precedent2=$precedent1;
	       $precedent1=$valeur;
           }
											
							
		

		
}
Ce code n'est pas bon mais je pense que c'est la base.
merci de votre attention.

ViPHP
ViPHP | 5462 Messages

26 mai 2010, 15:04

faut faire un nouveau tableau, et pas mettre ca dans le $tour

Petit nouveau ! | 5 Messages

26 mai 2010, 18:07

Je ne vois pas comment je pourrais faire pour enregistere toutes mes valeurs dans un nouveau tableau.

Voici le dernier code:

problème:

$tour[3][$t1] et $tour[3][$t1] ne corresponde pas aux 1° et 2° tour de la moyenne.
Ce qui engendre bien sur une moyenne fausse.
while ($lecture = mysql_fetch_assoc($result)){ /* $lecture['Times'] affiche (1, 129.585, 1:33.439)Lap=(2, 223.024, 1:22.517)Lap=(3, 305.540, 1:21.795)Lap=(6, 860.873, 1:23.452)Lap=(8, 1235.883, 1:36.214)Lap=(9, 1332.096, 1:22.408)Lap=(10, 1414.504, 1:22.561)Lap=(11, 1497.065, 1:26.489)Lap=(12, 1583.554, 1:21.635)Lap=(13, 1665.190, 1:21.870)Lap=(14, 1747.060, 1:21.792) */
	$i++;
	
			$string =$lecture['Times'];
					preg_match_all('#(?<=Lap\=|^)\((\d+), (\d+(?:\.\d+)?), (\d+:\d{2}\.\d{3})\)#iU', $string, $tour);


 					echo "<pre>";
					print_r($tour);
					echo "</pre>";
							echo "<br><b>----------------------------------------------- </b><br>";
					$precedent1=-5;  // le tour précédent
					$precedent2=-5;  // le tour précédent du précédent
					$count=1;        // le nombre de tour consécutifs effectué

							foreach($tour[1] AS $clef=>$valeur)
								
									
							{
								if($valeur-1==$precedent1) // si le tour suis le précédent on incrémente le compteur
								{
									
									$count++;
								}
								else // sinon on le remet à 1
								{
									$count=1;
								}
								if($count==3) // quand on à 3 tours consécutifs, on affiche le résultat
								{

									$count=1;
														
									
									$t1=$precedent2;
									$t2=$precedent1;
									$t3=$clef;
									
									$temps_centieme =convert_centiemes($tour[3][$t1]) ;
									echo"<b>En centième trs1:</b>",$temps_centieme,"<br />";
									$t1=$temps_centieme;
									
									$temps_centieme =convert_centiemes($tour[3][$t2]) ;
									echo"<b>En centième trs2:</b>",$temps_centieme,"<br />";
									$t2=$temps_centieme;
									
									$temps_centieme =convert_centiemes($tour[3][$t3]) ;
									echo"<b>En centième trs3:</b>",$temps_centieme,"<br />";
									$t3=$temps_centieme;

									
									$Cmoyenne=($t1+$t2+$t3)/3; // ici ton calcule pour avoir la moyenne
									$moyenne=convert_temps($Cmoyenne);
									echo "<b>min de moyenne </b> : ",$moyenne,"<br />";
									$tour1=convert_temps($t1);									
								        echo "min tour : ", $precedent2,"",$tour1,"<br />";
									$tour2=convert_temps($t2);
									echo "min tour  : ", $precedent1,"",$tour2,"<br />";
									$tour3=convert_temps($t3);
									echo "min tour  : ", $valeur,"",$tour3,"<br />";
									echo "<br><b>----------------------------------------------- </b><br>";
								}
       					

								// on met à jours les variables précédent2 et 1
								$precedent2=$precedent1;
								$precedent1=$valeur;
							}
							
		

		
}

Et ce qu'il m'affiche:
Array
(
    [0] => Array
        (
            [0] => (1, 158.783, 2:11.639)
            [1] => (2, 290.421, 2:08.281)
            [2] => (3, 418.703, 2:03.131)
        )

    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [2] => Array
        (
            [0] => 158.783
            [1] => 290.421
            [2] => 418.703
        )

    [3] => Array
        (
            [0] => 2:11.639
            [1] => 2:08.281
            [2] => 2:03.131
        )

)


-----------------------------------------------
En centième trs1:128281
En centième trs2:123131
En centième trs3:123131
2:04.847.66666666667min de moyenne :
2:08.281min tour : 1
2:03.131min tour : 2
2:03.131min tour : 3

Petit nouveau ! | 5 Messages

26 mai 2010, 20:49

Toujours bloqué je ne vois pas comment je pourrais faire pour enregistre toutes mes valeurs dans un nouveau tableau lorqu' elles répondent aux conditions.
Si vous avez une idée miracle ,je suis preneur. :(

ViPHP
ViPHP | 5462 Messages

26 mai 2010, 21:01

Toujours bloqué je ne vois pas comment je pourrais faire pour enregistre toutes mes valeurs dans un nouveau tableau lorqu' elles répondent aux conditions.
Si vous avez une idée miracle ,je suis preneur. :(
deja a la base il t'en affiche que 3

Petit nouveau ! | 5 Messages

26 mai 2010, 21:31

Toujours bloqué je ne vois pas comment je pourrais faire pour enregistre toutes mes valeurs dans un nouveau tableau lorqu' elles répondent aux conditions.
Si vous avez une idée miracle ,je suis preneur. :(
deja a la base il t'en affiche que 3
désolé mais je ne comprend pas .3?

Array
(
[0] => Array
(
[0] => (1, 158.783, 2:11.639)
[1] => (2, 290.421, 2:08.281)
[2] => (3, 418.703, 2:03.131)
)

[1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)

[2] => Array
(
[0] => 158.783
[1] => 290.421
[2] => 418.703
)

[3] => Array
(
[0] => 2:11.639
[1] => 2:08.281
[2] => 2:03.131
)

)


-----------------------------------------------
En centième trs1:128281
En centième trs2:123131
En centième trs3:123131
2:04.847.66666666667min de moyenne :
2:08.281min tour : 1
2:03.131min tour : 2
2:03.131min tour : 3

-----------------------------------------------

Array
(
[0] => Array
(
[0] => (2, 1744.240, 2:10.244)
[1] => (3, 2038.604, 2:08.817)
[2] => (5, 2985.344, 2:02.637)
[3] => (6, 3247.881, 2:07.697)
[4] => (7, 3375.578, 2:01.977)
[5] => (8, 3497.555, 2:05.260)
)

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

[2] => Array
(
[0] => 1744.240
[1] => 2038.604
[2] => 2985.344
[3] => 3247.881
[4] => 3375.578
[5] => 3497.555
)

[3] => Array
(
[0] => 2:10.244
[1] => 2:08.817
[2] => 2:02.637
[3] => 2:07.697
[4] => 2:01.977
[5] => 2:05.260
)

)


-----------------------------------------------
En centième trs1:125260
En centième trs2:0
En centième trs3:121977
1:22.412.33333333333min de moyenne :
2:05.260min tour : 5
0:00.000min tour : 6
2:01.977min tour : 7

ViPHP
ViPHP | 5462 Messages

26 mai 2010, 21:37

donc le premier t'en affiche 3, le 2eme 6, si on suis ta logique ca serait

1 champs :
- serie : 1, 2, 3

2 champs
-serie : 5, 6, 7

Petit nouveau ! | 5 Messages

26 mai 2010, 21:48

donc le premier t'en affiche 3, le 2eme 6, si on suis ta logique ca serait

1 champs :
- serie : 1, 2, 3

2 champs
-serie : 5, 6, 7
En fait j'ai un grand nombre de chaine de caractère stocké dans la base.

Pour chaque chaine je cherche si il y a 3 tours consécutif.
Si c'est le cas je calcule la moyenne des 3 tours ,puis je les stockerais dans la base.

1 champs :
- serie : 1, 2, 3 (les tours 1 .2 et 3 répondent aux conditions (consécutif) =>affichage puis moyenne

2 champs
-serie : 5, 6, 7 (les tours 5 .6 et 7 répondent aux conditions (consécutif) =>affichage puis moyenne


Le problème :

-lorsque les tours consécutif sont sélectionné je veux calculé la moyenne en temps des 3 tour.
et la je n'arriva pas à selectionné le temps correspondant au bon nuréro de tour.

Condition s'apuis sur $tour[1]
mais les temps des tours sont stoké $tour[3]