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 :

PHP réarranger un tableau [PHP 5.5]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut PHP réarranger un tableau
    Bonjour ,

    J'ai un tableau $myarray de cette forme :

    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
    Array
    (
        [0] => Array
            (
                [nid] => 29488
                [lid] => 796
                [nursery_name] => Affre
                [street] => 7 rue Saint Bruno
                [city] => Paris
                [cp] => 75018
                [cp_posted] => 75015
                [lat] => 48.885903
                [ln] => 2.355662
                [nursery_direct_availability] => 0
                [nursery_zoom_map] => 17
                [nursery_type] => 3
            )
     
        [1] => Array
            (
                [nid] => 35983
                [lid] => 895
                [nursery_name] => Tom Pouce
                [street] => 32, rue de Turin 
                [city] => Paris
                [cp] => 75008
                [cp_posted] => 75015
                [lat] => 48.882150
                [ln] => 2.324586
                [nursery_direct_availability] => 18
                [nursery_zoom_map] => 17
                [nursery_type] => 4
            )
     
        [2] => Array
            (
                [nid] => 29403
                [lid] => 711
                [nursery_name] => Cabriole
                [street] => 14, rue Cambacérès
                [city] => Paris
                [cp] => 75008
                [cp_posted] => 75015
                [lat] => 48.872957
                [ln] => 2.318232
                [nursery_direct_availability] => 0
                [nursery_zoom_map] => 17
                [nursery_type] => 2
            )
     
        [3] => Array
            (
                [nid] => 29361
                [lid] => 669
                [nursery_name] => Jeux de mots
                [street] => 83 ter rue de Meaux
                [city] => Paris
                [cp] => 75015
                [cp_posted] => 75015
                [lat] => 48.883191
                [ln] => 2.375561
                [nursery_direct_availability] => 10
                [nursery_zoom_map] => 17
                [nursery_type] => 1
            )
     
     
     
    )
    Ce que je veux faire c'est de comparer ma valeur des clés cp et cp_posted et si c'est egale , je veux le mettre au debut du tableau

    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
    Array
    (
        [0] => Array
            (
                [nid] => 29361
                [lid] => 669
                [nursery_name] => Jeux de mots
                [street] => 83 ter rue de Meaux
                [city] => Paris
                [cp] => 75015
                [cp_posted] => 75015
                [lat] => 48.883191
                [ln] => 2.375561
                [nursery_direct_availability] => 10
                [nursery_zoom_map] => 17
                [nursery_type] => 1
            )
        [1] => Array
            (
                [nid] => 29488
                [lid] => 796
                [nursery_name] => Affre
                [street] => 7 rue Saint Bruno
                [city] => Paris
                [cp] => 75018
                [cp_posted] => 75015
                [lat] => 48.885903
                [ln] => 2.355662
                [nursery_direct_availability] => 0
                [nursery_zoom_map] => 17
                [nursery_type] => 3
            )
     
        [2] => Array
            (
                [nid] => 35983
                [lid] => 895
                [nursery_name] => Tom Pouce
                [street] => 32, rue de Turin 
                [city] => Paris
                [cp] => 75008
                [cp_posted] => 75015
                [lat] => 48.882150
                [ln] => 2.324586
                [nursery_direct_availability] => 18
                [nursery_zoom_map] => 17
                [nursery_type] => 4
            )
     
        [3] => Array
            (
                [nid] => 29403
                [lid] => 711
                [nursery_name] => Cabriole
                [street] => 14, rue Cambacérès
                [city] => Paris
                [cp] => 75008
                [cp_posted] => 75015
                [lat] => 48.872957
                [ln] => 2.318232
                [nursery_direct_availability] => 0
                [nursery_zoom_map] => 17
                [nursery_type] => 2
            )
     
     )
    J'ai testé avec usort mais il ne permet pas de comparer la valeur de deux clés différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function comparaison ($a, $b){
     if($a['cp'] == $b['cp_posted']){
        return 1;
     }
    }
     
    usort($myarray, "comparaison");
    Merci pour votre aide

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    J'ai testé avec usort mais il ne permet pas de comparer la valeur de deux clés différent[e]s
    Mais si, seulement ta fonction de comparaison n'est pas bonne. Il faut comprendre que $a et $b désignent chacun un des éléments du tableau, or dans ta fonction tu compares la valeur de la clé 'cp' d'un item avec la valeur de la clé 'cp_posted' d'un autre item, ce qui bien sûr ne veut pas dire grand chose et ne donne pas le résultat escompté.

    Une fonction de comparaison pour usort n'est pas compliquée: quand l'élément $a doit être (pour une raison quelconque) avant l'élément $b la fonction doit retourner 1, dans le cas contraire ($b avant $a) -1, et quand il n'y pas d'ordre particulier 0 (quand 'cp' et 'cp_posted' sont égaux ou différents à la fois pour $a et pour $b).

    Tu peux facilement décrire les 3 cas de figure (ou plus malin, tu n'en décris que 2 et tu renvoies la 3e valeur à la fin de la fonction). Ce que cette fonction doit prendre en compte, c'est si 'cp' et 'cp_posted' sont égaux (ou pas) pour $a et pour $b simultanément.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    Bonjour et merci pour votre réponse .

    J'ai essayé de comprendre votre réponse et a transformé ça en code , et j'ai fait comme ça mais donne pas le résultat escompté

    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
     usort($myarray, function($a, $b)
           {
              if (($a['cp'] == $a['cp_posted']) && ($b['cp'] == $b['cp_posted']))
              {
                              return 1;
              }
              else if (($a['cp'] != $a['cp_posted'])  &&  ($b['cp'] != $b['cp_posted']))
              {
     
                  return -1;
              }
              else {
     
                  return 0;
              }
          });
    Merci pour votre aide

  4. #4
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    Après une petite recherche voici le code qui marche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    usort($myarray, function ($a, $b) use ($posted_code) {
                  if ($a['cp'] != $posted_code &&  $b['cp'] == $posted_code) {
                      return 1;
                  } elseif ($a['cp'] == $posted_code && $b['cp'] != $posted_code) {
                      return -1;
                  } else {
                      return 0;
                  }
              });
    avec $posted_code la valeur du CP dynamiquement postée par l'utilisateur

    Encore merci pour votre aide :-)

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je doute que ta dernière fonction marche vu qu tu compares chaque code postal à un valeur constante. Voilà la traduction de ce que j'ai décrit dans ma réponse précédente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    usort($myarray, function($a, $b) {
        if  ( $a['cp'] == $a['cp_posted'] && $b['cp'] != $b['cp_posted'] )
             return 1;
     
        if  ( $a['cp'] != $a['cp_posted'] && $b['cp'] == $b['cp_posted'] )
            return -1;
     
        return 0;
    });
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    En fait $posted_code est une variable contenant la valeur d'un champ de formulaire de recherche posté par l'utilisateur et non une constante

    Si si , mon code marche bien et je pense que le tien aussi car avec le tien on utilise la valeur d'une element de l'array mais le mien utilise une variable externe pour être comparée avec l'item que je veux.

    Avec ma méthode $myarray ne contient plus le clé du genre : [cp_posted] => 75015 , je le récupère dans la variable $posted_code

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ah oui d'accord, je n'avais pas vu que c'était toujours la même valeur (pourquoi l'avoir mise dans le tableau?). Bref, l'essentiel est que tu comprennes comment faire une fonction de comparaison.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    Je l'avais mis dans le tableau au début car j'ai pensé qu'il n’était pas possible d'utiliser une variable externe avec les fonctions de comparaison de usort , or on peut bien utiliser une variable externe

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

Discussions similaires

  1. [PHP-JS] Transferer tableau php a javascript
    Par stephane92400 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 12/07/2006, 14h05
  2. [Conception] Résultat d'une requête PHP dans un tableau avec lien ?
    Par DjMaC dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/04/2006, 20h37
  3. Javascript + PHP => checkbox et tableau incompatibles
    Par Matth_S dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2006, 15h38
  4. [PHP] trier un tableau dynamiquement
    Par caro. dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 31/01/2006, 17h08
  5. Réponses: 2
    Dernier message: 20/11/2005, 18h54

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