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] array_multisort et les valeurs nulles


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Tableaux] array_multisort et les valeurs nulles
    Bonjour,

    j'ai un petit soucis ^^

    Voila, j'ai passé mon apres midi a remplir mon tableau et à l'afficher comme il le fallait. Seulement maintenant j'ai un probleme ...

    Le site propose des tournois, et j'ai une valeurs "seed" (autrement dit tete de série). Le probleme est que lorsque je fais mon array_multisort comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_multisort($seed, SORT_NUMERIC, $timestamp, SORT_ASC, $status_inscription, SORT_DESC, $nom_de_lequipe_minuscule, SORT_ASC, $tab);
    Et bien, il me donne en 1er lieu les personnes n'ayant pas de seed (cela reviendrait au meme que si j'avais un seed égal à "0". J'aimerais faire en sorte que ceux dont les valeurs sont nulles soient en dernier.

    J'ai déja vu plusieurs choses :
    - la premiere concernant une requete mysql "ORDER BY FIELD()', mais là je suis dans un array ... et non dans une requete.
    - la seconde concernant un .. "NULL LAST" et "NULL FIRST" mais j'en sais pas plus j'ai jamais reussi a comprendre ou ça marchait..

    Merci de m'éclairer !!

    Cordialement
    Dernière modification par julp ; 04/11/2008 à 13h06. Motif: Utilisez le bouton résolu en bas au lieu d'éditer le titre de la discussion

  2. #2
    Membre chevronné Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Par défaut
    Bonjour,

    Une idée : tu peux mettre dans un autre tableau les personnes dont le SEED est NULL (en utlisant array_filter), trier les tableaux et les concaténer après.

    Je ne voie rien de plus propore, mais je suis curieux de voir les autres réponses

    Gillou.

  3. #3
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    Perso je ferais la même chose que Gilou, je me prend rarement la tête sur des trucs comme ca :p

    Sinon as-tu essayé de caster tes seeds en integer pour voir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_multisort((int) $seed, SORT_NUMERIC, $timestamp, SORT_ASC, $status_inscription, SORT_DESC, $nom_de_lequipe_minuscule, SORT_ASC, $tab);

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir !!

    Merci des réponses. Alors petite précision ... j'ai tout appris par moi meme, je code depuis 4 ans, mais je n'ai jamais fais détude d'info ou quoique ce soit :p donc en général, quand je ne sais pas faire quelque chose c'est que je n'y ai jamais touché xD

    J'ai tenté le (int) mais ça me met l'erreur que j'ai deja eu en essayant d'autres choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified in c:\program files\easyphp1-8\www\base\modules\Tournoi\admin.php on line 1163
    Ton idée Gilou me parait sympatique. Je vois le fond et je le comprends. Néanmoins, pour le remettre dans le code ... "ouch". Là il est 2h du mat, je rentre chez moi, je ne vais donc pas m'y remettre ^^ Si je comprend bien, je fais 2 requetes différentes à la suite ... du genre la 1ere : WHERE seed isnotnull et juste apres le isnull.

    Je testerai ça et je vous redis !!

    En tout cas merci de l'idée ^^

  5. #5
    Membre chevronné Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Par défaut
    Bonjour,

    Ce code devrait fonctionner, avec une seul requète.

    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
     
    <?php
    $seed = array();
     
    $seed1['A'] = NULL;
    $seed1['B'] = 5;
    $seed1['C'] = 15;
    $seed1['D'] = NULL;
    $seed1['E'] = 7;
     
    $seed_uniquement_null  = array_filter ( $seed1, "est_null" );
    $seed_sans_null  = array_filter ( $seed1, "n_est_pas_null" );
     
    asort($seed_uniquement_null);
    asort($seed_sans_null);
     
    $seed2 = array_merge ( $seed_uniquement_null, $seed_sans_null);
     
    echo "<pre>";
    echo "<h1>AVANT le tri</h1>";
    print_r($seed1);
    echo "<h1>APRES le tri</h1>";
    print_r($seed2);
    echo "</pre>";
     
    function est_null($val) {
    	return is_null($val) ;
    }
    function n_est_pas_null($val) {
    	return !is_null($val) ;
    }
    ?>
    Gillou

  6. #6
    Invité
    Invité(e)
    Par défaut
    MErci pour ton code !!

    Il marche effectivement, mais pour l'adaptation ... ça merde (normal sinon ce serait trop beau :p)

    J'ai en fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$tab[]=array( 'seed'=>$seed, 'nom_equipe'=>$nom_equipe, 'status_inscription'=>$status_inscription, 'status_inscription_ecriture'=>$status_inscription_ecriture, 'nom_equipe_minuscule'=>$nom_equipe_minuscule, 'id_participant'=>$id_participant, 'id_equipe_ou_clan'=>$id_equipe_ou_clan,  'timestamp'=>$timestamp);

    Donc du coup en dessous j'ai mis ton code, les 2 functions mis ailleurs (testé avec ton code il fallait les mettre en dehors de ma fonction). Maintenant j'ai meme enlevé la fonction isnull, afin d'afficher que celles qui ont un seed ... Mais alors là je comprend pas ... il m'affiche tout !!! :o

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $seed_sans_null  = array_filter ( $tab, "n_est_pas_null" );
     
    asort($seed_sans_null);
     
    $tab2 = array_merge ($seed_sans_null);
     
    echo"<pre>";print_r($tab2);echo"</pre>";
    J'ai meme les valeurs nulles ... alors que j'ai bien c/c ta fonction qui marchait bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function n_est_pas_null($val) {
    	return !is_null($val) ;
    }
    [EDIT] :

    En fait mon probleme vient du fait que mon seed se trouve dans $tab[$i]['seed'] et non pas dans $tab['seed']

    Help ! xD

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

Discussions similaires

  1. Les jointures... et les valeurs nulles !
    Par PJ_56 dans le forum SQL
    Réponses: 2
    Dernier message: 25/04/2006, 23h33
  2. [Excel] Ne pas tracer les valeurs nulles d'un graphe
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/02/2006, 19h00
  3. Réponses: 7
    Dernier message: 16/12/2005, 14h59
  4. order by sans les valeurs NULL
    Par pendragon509 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/10/2005, 12h31
  5. Comment gérer les valeur Nulles dans une requête ?
    Par sondo dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h02

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