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 :

Pert d'index avec un array_multisort


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    GYK
    GYK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 406
    Par défaut Pert d'index avec un array_multisort
    Bonjour,
    J'ai un code de tri d'un tableau comme ceci:
    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
     
     
    <?php
    $data[18] = array('PRIORITE' => 98, 'TOTAL' => 2, 'CTR' => 2, 'PTS_J' => 12);
    $data[11] = array('PRIORITE' => 89, 'TOTAL' => 1, 'CTR' => 1, 'PTS_J' => 22);
    $data[49] = array('PRIORITE' => 89, 'TOTAL' => 1, 'CTR' => 4, 'PTS_J' => 25);
    $data[47] = array('PRIORITE' => 98, 'TOTAL' => 1, 'CTR' => 0, 'PTS_J' => 72);
    $data[45] = array('PRIORITE' => 86, 'TOTAL' => 6, 'CTR' => 3, 'PTS_J' => 26);
    $data[24] = array('PRIORITE' => 86, 'TOTAL' => 6, 'CTR' => 3, 'PTS_J' => 12);
     
    foreach ($data as $key1 => $row1) {
        $PRIORITE[$key1]  = $row1['PRIORITE'];
        $TOTAL[$key1] = $row1['TOTAL'];
        $CTR[$key1] = $row1['CTR'];
        $PTS_J[$key1] = $row1['PTS_J'];
    }
     
    array_multisort($PRIORITE, SORT_DESC, $TOTAL, SORT_DESC, $CTR, SORT_DESC, $PTS_J, SORT_DESC, $data);
    ?>
    Mais quand je fains un print_r de mon tableau trié, mes valeurs d'index:
    18
    11
    49
    .
    .
    .
    sont remplacé par :
    0
    1
    2
    .
    .
    .
    N'y à t'il pas moyen de garder mes valeurs ?
    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    extrait de la doc:
    array_multisort() sert à trier simultanément plusieurs tableaux, ou bien à trier un tableau multidimensionnel, suivant l'une ou l'autre de ses dimensions.

    Les clés associatives (chaîne de caractères) seront maintenues, mais les clés numériques seront réindexées.
    Donc je suppose qu'il faut que tu travaille avec des clefs $data['18'] plutot que $data[18]

  3. #3
    GYK
    GYK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 406
    Par défaut
    Bonjour gototog,

    J'ai testé comme tu m'a dit ,mais même avec une clé en caractère il me réinitialise l'index.

    Après un test avecc des caractères alphabétique, il conserve bien ces caractères, donc que le numérique soit entre cote ou pas, pour lui c'est du numérique.

    Et moi ça ne m'arrange pas.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    Oui désolé, je viens de voir ca en testant chez moi. J'ai pas d'autre piste qu'un usort ducoup

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Dans les tableaux, PHP est très tatillon en ce qui concerne les clés : il caste automatiquement les chaines de type entier en entier, tronque les décimaux, accepte uniquement des scalaires...

    Tu n'as pas d'autre choix que de "protéger" tes clés numériques en les transformant de manière à ce qu'elles soient interprétées comme des string, comme ceci :

    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
    <?php
     
    $data[18] = array('PRIORITE' => 98, 'TOTAL' => 2, 'CTR' => 2, 'PTS_J' => 12);
    $data[11] = array('PRIORITE' => 89, 'TOTAL' => 1, 'CTR' => 1, 'PTS_J' => 22);
    $data[49] = array('PRIORITE' => 89, 'TOTAL' => 1, 'CTR' => 4, 'PTS_J' => 25);
    $data[47] = array('PRIORITE' => 98, 'TOTAL' => 1, 'CTR' => 0, 'PTS_J' => 72);
    $data[45] = array('PRIORITE' => 86, 'TOTAL' => 6, 'CTR' => 3, 'PTS_J' => 26);
    $data[24] = array('PRIORITE' => 86, 'TOTAL' => 6, 'CTR' => 3, 'PTS_J' => 12);
     
    $data = array_combine(array_map(function($v) { return "0{$v}";}, array_keys($data)), $data);
     
    foreach ($data as $key1 => $row1)
    {
        $PRIORITE[$key1]  = $row1['PRIORITE'];
        $TOTAL[$key1]     = $row1['TOTAL'];
        $CTR[$key1]       = $row1['CTR'];
        $PTS_J[$key1]     = $row1['PTS_J'];
    }
     
    array_multisort($PRIORITE, SORT_DESC, $TOTAL, SORT_DESC, $CTR, SORT_DESC, $PTS_J, SORT_DESC, $data);
     
    $data = array_combine(array_map(function($v) { return (int)$v;}, array_keys($data)), $data);
     
    ?>

  6. #6
    GYK
    GYK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 406
    Par défaut
    Bonjour rawsrc,

    Je reprend le fil seulement maintenant, j'avais abandonné ce problème, mais comme il s'avère que j'en avais vraiment besoin je suis retourné à tout hasard sur le forum, et miracle, tu me propose une solution et qui fonctionne parfaitement.

    Grand merci rawsrc.

    Bon W-E

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

Discussions similaires

  1. Pertes de mémoire avec Rave
    Par stepschn dans le forum Delphi
    Réponses: 8
    Dernier message: 15/10/2006, 11h18
  2. ADO + Access 2000 + index avec doublon
    Par jnc dans le forum Bases de données
    Réponses: 7
    Dernier message: 25/10/2005, 16h49
  3. Problème d'index avec load data file
    Par bruno782 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/03/2005, 12h11
  4. Installation et perte d'icône avec Firebird
    Par SebCBien dans le forum Applications et environnements graphiques
    Réponses: 22
    Dernier message: 31/10/2004, 16h46
  5. Index avec conditions
    Par marhnix dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/03/2004, 10h48

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