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 :

lecture d'un tableau


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut lecture d'un tableau
    Bonjour,

    Alors j'ai un p'tit problème, que je sais résoudre mais surtout que je ne comprend pas ???

    Quand j'écris cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $ville_france['Capitale']="Paris";
    $ville_france[]="Marseille";
    $ville_france[]="Lyon";
     
    foreach ($ville_france as $cle => $contenu) {
    	if ($cle == 'Capitale') 
    		echo "<b>". $cle . " - " . $contenu . "</b><br/>\n";
    	else
    		echo $contenu . "<br/>\n";
    }
    Cela devrait m'écrire en GRAS la ville qui a comme clé : "Capitale" et les autres non.

    Mais en fait , Marseille, qui a comme indice 0 dans mon tableau est reconnu comme vrai dans mon test ($cle == 'Capitale')
    Et je ne comprend pas pourquoi.

    Je sais que je peux écrire === pour solutionner, mais la question est Pourquoi, PHP considère que $cle vaut 'Capitale' lorsque je point esur Marseille ???

    Merci beaucoup

    Moza

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par _moza Voir le message
    Mais en fait , Marseille, qui a comme indice 0 dans mon tableau est reconnu comme vrai dans mon test ($cle == 'Capitale')
    Et je ne comprend pas pourquoi.
    parce que dans ce cas $cle est du type "entier" donc pour faire la comparaison, "Capitale" est converti en entier aussi ce qui donne 0
    donc dans ton cas, tu as aussi besoin de comparer les type donc "===" est la solution

  3. #3
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    salut,

    en faisant un test je m'aperçoit que le même problème se pose quand on fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach ($ville_france as $cle => $contenu) {
      if ($cle == 0) 
        echo "<b>". $cle . " - " . $contenu . "</b><br/>\n";
      else
        echo $contenu . "<br/>\n";
    }

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    @nosferapti

    J'ai bien compris ta réponse, mais pourquoi tu dis qu'on a un "entier" dans $key ?

    J'ai regardé la doc PHP, et il n'est pas mentionné que la clé avait un type par défaut... ou j'ai pas p't'ête pas tout compris et j'fais ma blonde mais ça vient d'ou que $key est un "entier" et non une chaine de caractères ?
    Là, je travaille avec un tableau associatif...

    Bon, c'est déjà une direction, mais je voit pas d'ou ça vient... même si ça paraît sensé, t'a un lien qui explique ça au niveau de la doc ?

    @Thes32

    C'est ça !

    ... donc la réponse précédente confirme... même si j'comprend pas tout et que je n'aurais rien contre un p'tit plus d'info.

    En tous cas, merci pour vos réponses.

    Moza

  5. #5
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    salut _moza,

    cela n'a rien avoir avec les tableaux en géneral, c'est plutôt une question de comparaison d'un entier à une chaîne de caractère : la chaîne est d'abord convertie en entier.

    Dans ton cas
    est équivalent à
    voir http://fr2.php.net/manual/fr/languag...ing.conversion

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En fait, les deux explications sont vraies : si tu compares une chaine à un entier, la chaine sera convertie en entier (selon les règles données par Thes dans son dernier post)
    D'autre part, bien que tu travailles avec un tableau associatif, tu as effectivement des clés qui sont des entiers.
    Si une clé n'est pas spécifiée pour une valeur, l'indice entier maximal sera pris et la nouvelle clé sera cette valeur, plus 1.
    Les tableaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ville_france['Capitale']="Paris";
    $ville_france[]="Marseille";
    $ville_france[]="Lyon";
     
    var_dump(array_keys($ville_france));
    /* renvoie : array(3) {
      [0]=>  string(8) "Capitale"
      [1]=>  int(0)
      [2]=>  int(1)
    }*/
    Marseille est indéxé avec la clé numérique 0 et Lyon avec la clé numérique 1.
    Donc en comparant la clé de Marseille ((int) 0) avec 'Capitale', tu forces la conversion de 'Capitale' en entier, ce qui donne (int) 0. D'où équalité...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    YES !

    Bon, j'ai mis l'temps j'ai tout compris

    MERCI pour votre aide.

    Moza

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

Discussions similaires

  1. [MySQL] Lecture d'un tableau et fonction "IN"
    Par ZoumZoumMan dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/11/2006, 13h49
  2. Problème de lecture dans un tableau associatif … ?
    Par sadao dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/07/2006, 22h24
  3. Lecture d'un tableau dans un fichier
    Par Sachiel31 dans le forum C++
    Réponses: 30
    Dernier message: 19/07/2006, 19h57
  4. C++ lecture d'un tableau dans un fichier
    Par nicoss dans le forum C++
    Réponses: 1
    Dernier message: 28/05/2006, 10h26
  5. Réponses: 4
    Dernier message: 12/10/2005, 21h22

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