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] problème avec array_diff_uassoc


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut [Tableaux] problème avec array_diff_uassoc
    Bonjour à tous,
    Je ne comprends pas le comportement du code ci-dessous, repris dans la doc de php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function key_compare_func($a, $b)
    {
        if ($a === $b) {
            return 0;
        }
        return ($a > $b)? 1:-1;
    }
     
    $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "1" => "red");
    $array2 = array("a" => "green", "yellow", 1 => "red");
    $result = array_diff_uassoc($array1, $array2, "key_compare_func");
    print_r($result); // Affiche Array ( [b] => brown [c] => blue )
    En effet, l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    key_compare_func("1" === 1)
    devrait renvoyer 1 ou -1, et donc la paire "1" => "red" devrait être renvoyée dans le tableau $result. Si quelqu'un peut m'expliquer...
    PS: Même problème avec array_diff_assoc...
    Things working well, no problems. Time to upgrade.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    "1" est considéré comme un int plutôt que un char. Je ne sais pas pourquoi et je trouve sa bizarre mais si tu fais test le type c'est ce que sa renvoie.

    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
    <?php
     
    function key_compare_func($a, $b)
    {
    	echo gettype($a);
    	echo gettype($b);
    	echo "<br>";
        if ($a === $b) {
            return 0;
        }
        return ($a > $b)? 1:-1;
    }
     
    $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "1" => "red");
    $array2 = array("a" => "green", "yellow", 1 => "red");
    $result = array_diff_uassoc($array1, $array2, "key_compare_func");
    print_r($result);
    ?>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    C'est bien ça qui me chagrine!
    Une idée?
    Things working well, no problems. Time to upgrade.

  4. #4
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    si tu fait
    Il te retourne int ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    non, il retourne bien "string"...
    Things working well, no problems. Time to upgrade.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    Ok j'ai obtenu une explication (merci à ryle ), c'est bon à savoir!


    php.net a écrit:
    Une clé key est soit un entier soit une chaîne de caractères. Si une clé est la représentation standard d'un entier positif, elle sera interprétée comme tel. (i.e. '8' sera interprété comme 8, tandis que '08' sera interprété comme '08'.) [...] Il n'y a aucune différence entre les tableaux indexés et les tableaux associatifs en PHP ; il n'y a qu'un type array, qui peut contenir soit des entiers, soit des chaînes en guise d'index.
    J'imagine donc qu'il doit considérer tes deux index comme des chaines de caractères
    Things working well, no problems. Time to upgrade.

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

Discussions similaires

  1. [Tableaux] Problème avec utf8_encode()
    Par RapidJul dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 18h22
  2. [Tableaux] Problème avec array_multisort
    Par ecocentric dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2005, 14h56
  3. [Tableaux] Problème avec les boucles
    Par speed_man002 dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 15h42
  4. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 10h30
  5. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37

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