IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Problème tri de tableau à deux dimensions


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut [Tableaux] Problème tri de tableau à deux dimensions
    Bonjour,

    Vous allez me dire qu il existe dejà des aides sur le forum mais je n'y arrive pas quand meme.

    Je voudrais trier mon tableau par date (datetime).

    Pour résumé, j'ai execute 3 requetes que j'ai mis dans un tableau a deux dimensions :
    tab[$j][1] ===> date

    J'ai ecris ma fonction de comparaison qui doit etre fausse (lol):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function trieTableau($tab,$tab2)
    	  {
    		  if($tab1>$tab2) return -1;
    		  else if ($tab1<$tab2) return 1;
    		  else return 0;
    	  }
    pour mettre mon usort :
    usort ($tab,'trieTableau');

    Merci

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Tu peux pas faire le tri directement dans tes requêtes avec un ORDER BY ?

    Sinon $tab1 et $tab2 sont des tableaux, si c'est le cas c'est chaud de comparer deux tableaux direct... C'est les éléments qu'il faut comparer.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    Non, malheureusement je ne peux pas dans ma requete directement.

    Pour etre franc ma fonction de comparaison est celle que j'ai trouve sur d'autres discussions, $tab1 et $tab2 sont deux valeurs.

    Merci de me repondre

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Je pense que l'erreur vient du usort, il n'y a pas de lien entre la fonction de tri et les dates d'où je pense le problème. Peux-tu en dire un peu plus sur $tab ? A quoi correspondent les deux dimensions ?
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    En fait dans mon tableau la premiere dimension correspond a chaque ligne de mes requetes :

    $tab[$j][1] = $ligne['dateDebut'];

    et ma deuxieme dimension donc au colonne : id, datedebut de la requete.

    voici une des 3 requetes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
                 $req="select * from tel ;";
    	$res=mysql_query($req);
    	$j=0;
     
    		while($ligne=mysql_fetch_array($res))
    		{
     
    			$tab[$j][0] = $ligne['id'];
    			$tab[$j][1] = $ligne['dateDebut'];
    			$tab[$j][2] = $ligne['libelle'];
    			$tab[$j][3] = $ligne['cloture'];
     
    			$j++;	
    		 }
    J effectue les deux requetes a la suite ensuite je fais appel a usort.

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Et pourquoi tu peux pas le faire le ORDER BY ?!?
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    pour une requete ca fonctione mais pas pour 3, en fait je veux trier les 3 requetes ensemble. A moins que ! Est ce possible ?

    pourtant j'ai essaye et il ne voulais pas trier les 3 en meme temps, l'erreur provenait du order by.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    Donc l'order by n'est bien pas possible ?

  9. #9
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Donne ton code avec les 3 requêtes et la construction du tableau parce que là je capte plus.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    +1 jwhite



    ps: félicitation au mans vs vs souvenez comment on gagne
    Stay in Bed .. Save Energy

  11. #11
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par boo64
    +1 jwhite



    ps: félicitation au mans vs vs souvenez comment on gagne
    Et ouais l'équipe est de retour, c'était un bien beau match, dommage que la salle était vide une nouvelle fois L'Elan s'est fait peur mais bon ça reste un niveau au dessus avec Strasbourg (malgré la défaite) et Nancy, impressionnants...
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 30
    Points : 34
    Points
    34
    Par défaut
    Je crois que il fait 3 requetes successives sur 3 tables différentes!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $size = count($tab);
    $continue = true;
     
    while($continue)
    {
     
        $continue = false;
        for ($i = 0;$i<$size-1; $i++)
        {
          if ($tab[$i][1] > $tab[$i+1][1]) // Je sais pas si ca marche avec les date, sinon tu utilise une fonction de comparaison
          {
            $temp = $tab[$i][1];
            $tab[$i][1] = $tab[$i+1][1];
            $tab[$i+1][1] = $temp;
            $continue = true;
          }
    }

    Sinon si tu n'utilise pas des clés numériques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $size = count($tab);
    $keys = array_keys($tab);
    $values = array_values($tab);
    $order = array();
    for ($i = 0; $i < $size ; $i++)
    {
     $order[$keys[$i]] = $values[$i][1];
    }
    asort($order);
    while(list($key ,) =    each($order))
    {
        $final[$key]    =    $tab[$key];
    }
    $tab = $final;

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    J'ai un peu modifie mais je suis toujours dans l'erreur je vous mets mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    function recupereCampagne()
    	{
    	$req="select * from phoning ;";
    	$res=mysql_query($req);
    	$j=0;
     
    		while($ligne=mysql_fetch_array($res))
    		{
     
    			$tab[0][$j] = $ligne['id'];
    			$tab[1][$j] = $ligne['dateDebut'];
    			$tab[2][$j] = $ligne['libelle'];
    			$tab[3][$j] = $ligne['cloture'];
     
    			$j++;	
    		 }  
     
    	$req="select * from mailing ;";
    	$res=mysql_query($req);
     
    		while($ligne=mysql_fetch_array($res))
    		{
     
    			$tab[0][$j] = $ligne['id'];
    			$tab[1][$j] = $ligne['dateDebut'];
    			$tab[2][$j] = $ligne['libelle'];
    			$tab[3][$j] = $ligne['cloture'];
     
    			$j++;	
    		 }  
     
    	$req="select * from faxing ;";
    	$res=mysql_query($req);
     
    		while($ligne=mysql_fetch_array($res))
    		{
     
    			$tab[0][$j] = $ligne['id'];
    			$tab[1][$j] = $ligne['dateDebut'];
    			$tab[2][$j] = $ligne['libelle'];
    			$tab[3][$j] = -1;
     
    			$j++;	
    		 } 
     
     
    	  $this->afficheListeCampagne($tab);
    	  }	 
     
    	  function compare($a, $b) 
    	  {
    	  $date1=$a;
    	  $heure1 = $date1['hours'];
    	  $minute1 = $date1['minutes'];
    	  $seconde1 = $date1['seconds'];
    	  $mois1 = $date1['mon'];
    	  $jour1 = $date1['mday'];
          $annee1 = $date1['year'];
     
    	  $date2=$b;
    	  $heure2 = $date2['hours'];
    	  $minute2 = $date2['minutes'];
    	  $seconde2 = $date2['seconds'];
    	  $mois2 = $date2['mon'];
    	  $jour2 = $date2['mday'];
          $annee2 = $date2['year'];
     
    	  $nbsec1 = mktime ($heure1, $minute1, $seconde1, $mois1, $jour1, $annee1);
    	  $nbsec2 = mktime ($heure2, $minute2, $seconde2, $mois2, $jour2, $annee2);
     
    	  if($nbsec1<$nbsec2) return -1;
    	  else if($nbsec1>$nbsec2) return 1;
    	  else return 0;
          }
     
    	  function afficheListeCampagne($tab)
    	  {
    	  usort ($tab, "compare"); 
     
    	  echo '<table border=1 valign="center" align="center">';
    	  echo '<tr bordercolor="black" style="color:#FF0000">';			
    				echo '<td width="180" align="center">' ."Début de la campagne". '</td>';
    				echo '<td width="180" align="center">' ."Libelle". '</td>';
    				echo '<td width="180" align="center">' ."Cloture". '</td>';				
    				echo '</tr>';
     
    		$j=0;
    		while(isset($tab[0][$j])) 
    		 {
    		  		echo '<tr bordercolor="black">';			
    				echo '<td width="180" align="center">' .$tab[1][$j]. '&nbsp;' . '</td>';
    				echo '<td width="180" align="center">' .$tab[2][$j]. '&nbsp;' . '</td>';
     
    				$clo=$tab[3][$j];
    				if($clo==0)
    				echo '<td width="180" align="center">' ."En cours". '</td>';
    				else if($clo==1)
    				echo '<td width="180" align="center">' ."Terminé". '</td>';
    				else
    				echo '<td width="180" align="center">' ."Etat inconnu". '</td>';
     
    				echo '</tr>';	
    				$j++;	
    		  }
     
     
    	  echo '</table>';	
    	  }
    et mon message d'erreur est le suivant :

    Warning: usort(): Invalid comparison function. in c:\program files\easyphp1-8\www\php\prospect\cl_phoning.php on line 207

    et ensuite il effectue la procedure d'affichage tout de meme.

    L'ereur est au niveau de l'appel d'usort, j'ai vu celà sur des tutos mais bon ca me parait bizarre par rapport a mon tableau a deux dimensions.

    Merci

  14. #14
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Compare c'est ton trieTableau du premier post ?
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    oui c'est bien ca. desole

  16. #16
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 145
    Points : 91
    Points
    91
    Par défaut
    ya pas un pb là :

    if($nbsec1<$nbsec2) return -1;
    else if($nbsec1>$nbsec2) return 1;
    else return 0;
    }


    il manquerait pas une accolade après ton if par hasard?

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    Je l'ai rajouté pour tester , mais ce n'est pas ca. Merci

  18. #18
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    il manquerait pas une accolade après ton if par hasard?





    Essaie ça mais dans grande conviction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function trieTableau($tab,$tab2)
      {
      if($tab1['dateDebut']>$tab2['DateDebut']) return -1;
      else if ($tab1['dateDebut']<$tab2['dateDebut']) return 1;
      else return 0;
      }

    Je pense vraiment (comme je te l'ai déjà dit) que le problème vient de là. Car la fonction de comparaison avec usort s'applique à $tab, donc il va comparer $tab[0], $tab[1], ... Mais ce sont des lignes et pas des dates donc il fait pas ce que tu attends.
    A mon avis tu vas devoir faire ta propre fonction de tri pour t'en sortir, ça doit pas être prévu le tri de tableau à 2 dimensions.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    J'ai teste mais toujours la meme erreur, oui comme tu dis je vais me resoudre a faire ma propre fonction de tri, je vais perdre moins de temps qu'a chercher l'erreur.

    Je te remercie beaucoup JWhite d'avoir essayé avec moi.
    Bonne apres midi.

  20. #20
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Bonne après-midi, tiens moi au courant, et surtout bon courage pour faire le tri, en étant motivé ça se fait bien.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

Discussions similaires

  1. [Débutant] Tri de tableau à deux dimensions
    Par fireman59 dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/03/2013, 08h08
  2. [Tableaux] Problème de tri de tableau à 2 dimensions
    Par lebigboss dans le forum Langage
    Réponses: 1
    Dernier message: 09/05/2007, 16h34
  3. [Tableaux] utilisation d'un tableau à deux dimensions
    Par calitom dans le forum Langage
    Réponses: 1
    Dernier message: 28/11/2006, 18h01
  4. Réponses: 5
    Dernier message: 24/05/2006, 08h59
  5. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo