Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2011, 20h39   #1
Invité de passage
 
Inscription : octobre 2005
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3
Points : 0
Points : 0
Par défaut Recréer un tableau après modification d'une valeur

Bonjour,

Après plusieurs heures de recherche je n'arrive pas à trouver comment je dois procéder pour recréer un tableau avec la modification d'une valeur.

Le but:
Pouvoir effectuer un calcul sur le temps en version seconde, sachant de je reçois au départ le temps en HMS
Dans un premier, j'essaye de créer un nouveau tableau $point avec le champs temps en secondes au départ du champs hms du tableau $courses.
Tout fonctionne jusqu'à la fin ou je n'arrive pas à récréer le tableau $point.

Je suis pas expert en php, je m'embrouille avec les tableaux malgré les infos que je lis sur le net et dans les bouquins

d'avance merci


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
 
<?php
 
//----Déclaration de la fonction compare (tri du plus grand vers le plus petit)----------
 function compare($x,$y){
  if ( $x[1] == $y[1]) {
   return 0;
  } else if ( $x[1] < $y[1] ){
   return 1;
  } else
  return -1;
 }
 
//----------affichage du tableau créé----début du test-------------------  
 
 
//---------création du tableau courses-------------
$courses = array( array('a', '1:10:00','A'),
      array('c', '1:07:00','B'),
      array('b', '2:20:00','C'));
 
 
echo "affichage du tableau courses créé <br />";
//----------affichage du tableau comme il vient d'être créé---------------
 
for ( $ligne = 0; $ligne < 3; $ligne++ ){
 for ( $colonne = 0; $colonne < 3; $colonne++ ){
  echo ' ' .$courses[$ligne][$colonne];  
 }
 echo "<br />";
 }
 
//--------tri du tableau $couses via fonction compare sur le champs temps du plus grand vers le plus petit---------
 usort ($courses, 'compare' );
 
//------replace le pointeur sur le début du tableau courses---------
 reset ($courses);
 
echo "------affichage control après----usort--compare----------<br />";
 
// ----affichage de control du tableau $ couses après tri------------------
for ( $ligne = 0; $ligne < 3; $ligne++ ){
 for ( $colonne = 0; $colonne < 3; $colonne++ ){
  echo ' ' .$courses[$ligne][$colonne];
 }
 echo "<br />";
}
 
echo "<br />-----traitement heures secondes---------- <br />";
 
 
//-----------traitement du temps hms en secondes---------------
 for ( $ligne = 0; $ligne < 3; $ligne++ ){
  for ( $colonne = 0; $colonne < 3; $colonne++ ){  
 
 $nom = $courses[$ligne][0];//selectionne le champs qui possède le champs hms de la table courses
 $temps_sec =  $courses[$ligne][1]; //selectionne le champs qui possède le champs hms de la table courses
 $point = $courses[$ligne][2];//selectionne le champs qui possède le champs point de la table courses
 
 $temps_sec = explode (":",  $temps_sec);
 while (list ($indice, $valeur) = each($temps_sec))
 
  $temps1=$temps_sec[0];
  $temps2=$temps_sec[1];
  $temps3=$temps_sec[2];
 
   //combien d'heures ?
    $hours =($temps1 * 3600);
 
   //combien de minutes ?  
    $min = (($temps2 * 60)) ;
 
  //combien de secondes
    $sec = $temps3  ;
 
 $seconde_total= $hours+$min+$sec;
 
        }
 
//----!!!! c'est à partir d'ici que je patauge !!!! j'arrive pas à créer un tableau point-------
 
 $point = array("nom"=> $nom, "temps"=> $seconde_total,"total"=> $point);
   echo $point[nom].$point[temps].$point[total]."<br>" ;  
 
   echo "<br />";
}  
echo "----control de fin de  traitement";
 
?>
isamarcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 16h19   #2
Membre confirmé
 
Avatar de magnus2005
 
Inscription : avril 2005
Messages : 421
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 421
Points : 253
Points : 253
Hello,
j'ai pas vraiment saisi le pourquoi tu fais ce traitement sur les dates.
pourrait tu énoncer ton besoin fonctionnel plus simplement STP.

Sinon ta ligne suivante il y a ,je pense, un souci sur l'index

Code :
 echo $point[nom].$point[temps].$point[total]."<br>" ;
Il faudrait plutôt écrire
Code :
 echo $point['nom'].$point['temps'].$point['total'].'<br>' ;
magnus2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 13h13   #3
Invité de passage
 
Inscription : octobre 2005
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3
Points : 0
Points : 0
Je vais essayer de faire court.

1- je reçois un fichier csv avec (par exemple) les infos;

A ( nom du coureur);1:20:30 (temps du coureur heures:minutes:secondes);P (ciruit)
B ( nom du coureur);1:25:40 (temps du coureur);P (ciruit)
C ( nom du coureur);2:20:30 (temps du coureur);P (ciruit)

2- un calcul de points est effectué de la façon suivante.

un certains nombre de points est attribué en fonction du premier arrivé qui lui à 3000pts.
Le calcul des points se base sur le principe: 3 points en moins toutes les 5 secondes.

Donc dans un premier temps je transforme le champs "temps" en secondes afin de pouvoir effectuer mon calcul.

Pour revenir au problème. lorsque je fais un print_r de la table $course

j'ai ceci

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
Array
(
    [0] => Array
        (
            [0] => b
            [1] => 2:20:00
            [2] => B
        )
 
    [1] => Array
        (
            [0] => a
            [1] => 1:10:00
            [2] => A
        )
 
    [2] => Array
        (
            [0] => c
            [1] => 1:07:00
            [2] => C
        )
 
)
et lorque je fais la table $points j'ai
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
Array
(
    [0] => Array
        (
            [3] => Array
                (
                    [0] => b
                    [1] => 8400
                    [2] => B
                )
 
        )
 
    [1] => Array
        (
            [3] => Array
                (
                    [0] => a
                    [1] => 4200
                    [2] => A
                )
 
        )
 
    [2] => Array
        (
            [3] => Array
                (
                    [0] => c
                    [1] => 4020
                    [2] => C
                )
 
        )
 
)
or j'essaye d'avoir
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
Array
(
    [0] => Array
        (
            [0] => b
            [1] => 8400
            [2] => B
        )
 
    [1] => Array
        (
            [0] => a
            [1] => 4200
            [2] => A
        )
 
    [2] => Array
        (
            [0] => c
            [1] => 4020
            [2] => C
        )
 
)
En espérant avoir été un peu plus explicite

merci
isamarcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 19h08   #4
Membre confirmé
 
Avatar de magnus2005
 
Inscription : avril 2005
Messages : 421
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 421
Points : 253
Points : 253
C'est un probleme d'index dans les tableaux
mais à mon avis il y a trop de tableau pour chercher le probleme

A mon avis c'est plus rapide de :
1 déclarer une classe coureur
Code :
1
2
3
4
5
6
7
 
class Coureur{
var temps
var points
var nom 
var prenom
}
2 construire un tableau et ajouter les objets coureurs
Code :
1
2
3
4
5
6
7
8
9
10
 
$listCoureur = array();
foreach($courses as $coureurArray){
$coureur =new Coureur();
$coureur->nom = $coureurArray[0];
$coureur->temps= $coureurArray[1];
$coureur->prenom= $coureurArray[2];
$coureur->point=convertTempPoint(temps);
$listCoureur[]=$coureur;
}
3 Faire ton tri
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
//Tri sur les object du tableau .
// Un seul return par fonction
 function compare(Coureur $x,Coureur  $y){
$ret =-1;
  if ( $x->point == $y->point) {
   $ret =0;
  } elseif ( $x->point <  $y->point ){
   $ret=1;
  } 
  return $ret;
 }
 
usort($listCoureur,'compare');
magnus2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 08h16   #5
Invité de passage
 
Inscription : octobre 2005
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3
Points : 0
Points : 0
merci pour ton aide, je vais revoir la construction. C'est toujours bien d'avoir une autre vision (surtout quand on débute)
isamarcc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h08.


 
 
 
 
Partenaires

Hébergement Web