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] Bug dans array_unique, ou éléphant ?


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut [Tableaux] Bug dans array_unique, ou éléphant ?
    Bonjour à tous !

    Je viens de perdre quelques heures à m'arracher les cheveux sur la disparition d'un poste dans un tableau. Or, après plusieurs tests, je finis par me demander si le bug n'est pas dans le moteur PHP lui-même (Apache, Windows XP, PHP5). Je n'y crois pas vraiment, mais voici mon code de test :
    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
     
    echo "1.1 - tableau non dédupliqué : <br/>";
    $groupes = split( "!", "Editorial!Dossier!*!*" );
    for ( $j = 0; $j < count( $groupes ); ++ $j ) {
      echo "groupes[ $j ] = ".$groupes[ $j ]."<br>";
    }
     
    echo "1.2 - tableau dédupliqué : <br/>";
    $groupes = array_unique( $groupes );
    for ( $j = 0; $j < count( $groupes ); ++ $j ) {
      echo "groupes[ $j ] = ".$groupes[ $j ]."<br>";
    }
     
    echo "2.1 - tableau non dédupliqué : <br/>";
    $groupes = split( "!", "Editorial!Dossier!Dossier!*!*" );
    for ( $j = 0; $j < count( $groupes ); ++ $j ) {
      echo "groupes[ $j ] = ".$groupes[ $j ]."<br>";
    }
     
    echo "2.2 - tableau dédupliqué : <br/>";
    $groupes = array_unique( $groupes );
    for ( $j = 0; $j < count( $groupes ); ++ $j ) {
      echo "groupes[ $j ] = ".$groupes[ $j ]."<br>";
    }
    Et voici ma sortie html :
    1.1 - tableau non dédupliqué :
    groupes[ 0 ] = Editorial
    groupes[ 1 ] = Dossier
    groupes[ 2 ] = *
    groupes[ 3 ] = *
    1.2 - tableau dédupliqué :
    groupes[ 0 ] = Editorial
    groupes[ 1 ] = Dossier
    groupes[ 2 ] = *
    2.1 - tableau non dédupliqué :
    groupes[ 0 ] = Editorial
    groupes[ 1 ] = Dossier
    groupes[ 2 ] = Dossier
    groupes[ 3 ] = *
    groupes[ 4 ] = *
    2.2 - tableau dédupliqué :
    groupes[ 0 ] = Editorial
    groupes[ 1 ] = Dossier
    groupes[ 2 ] =
    Quelqu'un peut-il me dire où est l'éléphant ??????

  2. #2
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    J'oubliais un détail amusant : ajouter à la fin du code PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo "2.3 - mais si on passe par join() : <br/>";
    echo join( $groupes, "," );
    donne comme sortie supplémentaire :
    2.3 - mais si on passe par join() :
    Editorial,Dossier,*
    La petite étoile est de retour

  3. #3
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Bon, je m'auto-réponds En fait, la doc officielle répond à ma question précédente :
    Notez que les clés sont préservées. array_unique() trie les valeurs traitées comme des chaînes dans un premier temps, puis garde la première clé rencontrée pour chaque valeur et ignore les clés suivantes. Cela ne signifie pas que la clé de la première valeur rencontrée du tableau array non trié sera conservé.
    Ce qui explique la "disparition" de l'index [2] dans mon exemple. La fonction array_unique() interprète bien les tableaux comme des tableaux associatifs.

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

Discussions similaires

  1. [Tableaux] Bug dans un code perso
    Par tom06440 dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2006, 12h38
  2. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23
  3. Bug dans les expressions régulières ?
    Par SergioF dans le forum Linux
    Réponses: 8
    Dernier message: 12/05/2004, 15h14
  4. [PROPERTIES] Bug dans java.util.Properties ?
    Par mathieu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/04/2004, 15h11
  5. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41

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