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.