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 :

Tri de tableau à 4 colonnes [PHP 4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut Tri de tableau à 4 colonnes
    Bonjour à tous !

    Je lis un fichier texte qui contient les données comme suis :

    CNITC15NPE
    Nombre total d'octets libres : 1000000000
    Nombre total d'octets : 32210161664
    Nombre total d'octets libres disponibles : 14699315200
    CNITC15NPE
    Nombre total d'octets libres : 20000000000
    Nombre total d'octets : 113632239616
    Nombre total d'octets libres disponibles : 92581924864
    CNITC15NPE
    Nombre total d'octets libres : 14699315200
    Nombre total d'octets : 32210161664
    Nombre total d'octets libres disponibles : 14699315200
    CNITC15NPE
    Nombre total d'octets libres : 92581924864
    Nombre total d'octets : 113632239616
    Nombre total d'octets libres disponibles : 92581924864
    J'arrive à faire du traitement sur ces données en les affichants sous forme de graphique avec Artichow. ( les données vont par 4 : Nom du poste, nombre d'octet libre, nombre total d'octets et nombre total d'octets libre disponibles )

    Cependant, j'aimerais trier ces enregistrements. J'ai alors pensé à mettre chaque ligne du fichier dans un tableau puis faire du traitement 4 lignes par 4 lignes en les modifiant ( pour garder uniquement le nom de pc et les nombre d'octets sans la phrase qui les précede )

    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
    if(isset($_GET['choix2']))
              {
                $tableau = file('fichier.txt');
                // On compte le nombre de lignes du fichier
                $nbr = count($tableau);
                $ligne=0;
     
                while($ligne<$nbr)
                {
                  $tab[$ligne] = array
                  ( 		
                    'Station'=>$tableau[$ligne], 
                    'Espace libre'=>substr($tableau[$ligne+1],43), 
                    'Espace total'=>substr($tableau[$ligne+2],43), 
                    'pourcentage'=>((substr($tableau[$ligne+1],43)*100)/(substr($tableau[$ligne+2],43))), 
                  );
                  $ligne = $ligne+4;
                }
     
                foreach($tab as $cle=>$valeur) 
              	{ 
                		foreach($valeur as $cle2=>$valeur2) 
                		echo $cle2.' : '.$valeur2.'<br>'; 
                		echo "<br>";
              	} 
              }
    A savoir que ceci affiche :

    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
     
    Station : CNITC15XFD 
    Espace libre : 14699315200 
    Espace total : 32210161664 
    pourcentage : 45.635645524961
     
    Station : CNITC15ASE
    Espace libre : 92581924864 
    Espace total : 113632239616 
    pourcentage : 81.475050722281
     
    Station : CNITC15TFG 
    Espace libre : 1000000000 
    Espace total : 32210161664 
    pourcentage : 3.1046103103471
     
    Station : CNITC15CAD 
    Espace libre : 20000000000 
    Espace total : 113632239616 
    pourcentage : 17.600638751455
     
    Station : CNITC15ASR
    Espace libre : 14699315200 
    Espace total : 32210161664 
    pourcentage : 45.635645524961
    J'essaie tant bien que mal de trier ce tableau en fonction de la colonne pourcentage du plus grand au plus petit. Mais rien à faire je n'y arrive pas. A vrai dire j'ai essayé array_multisort() et asort() -> http://nl2.php.net/manual/fr/array.sorting.php
    mais rien à faire. Je ne sais pas trop quelle fonction utiliser dans mon cas.

    Des idées pour m'aiguiller sur la bonne fonction ?
    Bien cordialement.

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour, tu peux tester quelque chose comme ca :

    Code php : 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
     
    $tableau = array(
    	array('Station :' => 'CNITC15XFD',
    	'Espace libre :'=> 14699315200,
    	'Espace total :'=> 32210161664,
    	'pourcentage :' =>45.635645524961),
     
    	array('Station :'=> 'CNITC15ASE',
    	'Espace libre :'=> 92581924864, 
    	'Espace total :' =>113632239616, 
    	'pourcentage :'=> 81.475050722281),
     
    	array('Station :'=> 'CNITC15TFG', 
    	'Espace libre :'=> 1000000000, 
    	'Espace total :' =>32210161664,
    	'pourcentage :'=> 3.1046103103471),
     
    	array('Station :' => 'CNITC15CAD', 
    	'Espace libre :' => 20000000000, 
    	'Espace total :' => 113632239616, 
    	'pourcentage :' => 17.600638751455),
     
    	array('Station :' => 'CNITC15ASR',
    	'Espace libre :' => 14699315200, 
    	'Espace total :' => 32210161664, 
    	'pourcentage :' => 45.635645524961)
     
    );
     
    $tableau_trie = array();
     
    foreach($tableau as $cle=>$valeur)
    	if(!isset($tableau_trie[(string)$valeur['pourcentage :']]))
    		$tableau_trie[(string)$valeur['pourcentage :']] = $valeur;
    	else{
    		$cle_tab = $valeur['pourcentage :'];
    		while(true){
    			$new_cle_tab = $valeur['pourcentage :'].mt_rand(1, 100);
    			if($new_cle_tab != $cle_tab)
    				break;
    		}
    		$tableau_trie[(string)$new_cle_tab] = $valeur;
     
    	}
     
    ksort($tableau_trie, SORT_NUMERIC);
     
    $tableau_trie = array_values($tableau_trie);
     
    echo '<pre>';
    print_r($tableau_trie);
    echo '<pre>';
     
    /*
    Affiche:
     
    Array
    (
        [0] => Array
            (
                [Station :] => CNITC15TFG
                [Espace libre :] => 1000000000
                [Espace total :] => 32210161664
                [pourcentage :] => 3.1046103103471
            )
     
        [1] => Array
            (
                [Station :] => CNITC15CAD
                [Espace libre :] => 20000000000
                [Espace total :] => 113632239616
                [pourcentage :] => 17.600638751455
            )
     
        [2] => Array
            (
                [Station :] => CNITC15XFD
                [Espace libre :] => 14699315200
                [Espace total :] => 32210161664
                [pourcentage :] => 45.635645524961
            )
     
        [3] => Array
            (
                [Station :] => CNITC15ASR
                [Espace libre :] => 14699315200
                [Espace total :] => 32210161664
                [pourcentage :] => 45.635645524961
            )
     
        [4] => Array
            (
                [Station :] => CNITC15ASE
                [Espace libre :] => 92581924864
                [Espace total :] => 113632239616
                [pourcentage :] => 81.475050722281
            )
     
    )
     
     
    */

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Merci à toi !

    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
      if(isset($_GET['choix2']))
              {
                $tableau = file('fichier.txt');
                // On compte le nombre de lignes du fichier
                $nbr = count($tableau);
                $ligne=0;
     
                while($ligne<$nbr)
                {
                  $tab[$ligne] = array
                  ( 		
                    'Station'=>$tableau[$ligne], 
                    'Espace libre'=>substr($tableau[$ligne+1],43), 
                    'Espace total'=>substr($tableau[$ligne+2],43), 
                    'pourcentage'=>((substr($tableau[$ligne+1],43)*100)/(substr($tableau[$ligne+2],43))), 
                  );
                  $ligne = $ligne+4;
                }
     
     
     
              $tableau_trie = array();
     
              foreach($tab as $cle=>$valeur)
              	if(!isset($tableau_trie[(string)$valeur['pourcentage']]))
              		$tableau_trie[(string)$valeur['pourcentage']] = $valeur;
              	else{
              		$cle_tab = $valeur['pourcentage'];
              		while(true){
              			$new_cle_tab = $valeur['pourcentage'].mt_rand(1, 100);
              			if($new_cle_tab != $cle_tab)
              				break;
              		}
              		$tableau_trie[(string)$new_cle_tab] = $valeur;
     
              	}
     
              ksort($tableau_trie, SORT_NUMERIC);
     
              $tableau_trie = array_values($tableau_trie);
     
              echo '<pre>';
              print_r($tableau_trie);
              echo '<pre>';
    Ce que ça donne, ben un tableau de tableaux trié !
    J'ai juste eu à enlever les deux points après 'pourcentage' pour que ça fonctionne. =)

    Bien cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri de tableau suivant deux colonnes
    Par cedji dans le forum MATLAB
    Réponses: 2
    Dernier message: 11/10/2013, 10h14
  2. tri d'un tableau à 2 colonnes
    Par vanvan2583 dans le forum Fortran
    Réponses: 6
    Dernier message: 15/03/2012, 12h23
  3. Tri de tableau à deux colonnes
    Par dhoorens dans le forum C++
    Réponses: 3
    Dernier message: 08/08/2007, 00h21
  4. [Tableaux] Tri alphabétique sur des colonnes d'un tableau html
    Par arnaudperfect dans le forum Langage
    Réponses: 1
    Dernier message: 02/04/2007, 15h51
  5. tri sur la xème colonne
    Par r-zo dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/07/2003, 13h41

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