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 :

Meilleure utilisation des tableaux comme hashtable?


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2003
    Messages : 271
    Points : 720
    Points
    720
    Par défaut Meilleure utilisation des tableaux comme hashtable?
    Bonjour,
    je cherche l'équivalent d une hashtable/ d un dictionnaire en php où la clef autant que la valeur sont des variables.
    Dans tous les examples / tudo que je vois, on affecte des constantes à un tableau, et il n est pas clair si cela marche aussi bien avec des variables.

    J'ai donc des soucis avec la structure des array en php (que je trouve trop permissive, question d habitude surement, je viens du c++/c#/java...).

    Je veux un dictionnaire qui contienne des noms de fichiers retravaillés en clef, et le chemin complet en valeur.
    Dans ma fonction scan_directory_recursively, j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $directory_tree[] = array($normalize_filename, $path);
    Est ce la bonne facon d y ajouter une valeur?
    J'ai pensé aussi à $directory_tree[] = $normalize_filename => $path; mais cela n est pas correct.
    J'aurais écris directory_tree.Add(normalize_filename, path); en c# par ex.

    Ensuite, pour parcourir le tableau,
    je tente un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $my_array = scan_directory_recursively($src_dir);
    if (in_array($key, my_array))
    {
        $src_file = $my_array[$key];
       //...
    }
    apparemment, c est pas la bonne utilisation de in_array.
    Par ailleurs, si j omet ce test, quelle est la valeur de retour de $my_array[$key] si la $key n est pas présente?

    Comment dois je procéder?

    Merci de vos éclaircissements?

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pour ajouter un élément à ton hash, il suffit de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $directory_tree[$normalize_filename] = $path;
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2003
    Messages : 271
    Points : 720
    Points
    720
    Par défaut
    ok et merci.
    J'ai toutefois tjs des soucis.
    ds ma function scan_directory_recursively, soit je suis sur un fichier auquel cas je l ajoute à mon hash comme proposé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $directory_tree[$normalize_filename] = $path;
    , soit j ai un répertoire dont je veux ajouter le contenu avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $directory_tree[] = scan_directory_recursively($path)
    Pour vérifier, je tente un export,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           $arr = my_array;
            $fp = $this->open_create_file($destPath. "/list.txt"); // fopen(w)
    	foreach($arr as $key => $value)
    	{
    		fwrite($fp, $key."\t". $value."\n");
    	}
           	$this->close_file($fp); // fclose($fp);
    Mais mon fichier ne contient pas ce que je veux, pour l instant un laconique
    0 Array
    1 Array
    2 Array
    3 Array
    4 Array
    5 Array
    6 Array
    Il semblerait que la récursivité ds ma fonction ne soit pas au point...

    Ensuite, à la lecture, je tente un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $path = $my_array[$key];

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ton problème est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $directory_tree[] = scan_directory_recursively($path)
    Tu ajoutes un tableau dans un tableau.
    Je pense que tu devrais plutôt adapter un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach( scan_directory_recursively($path) as $key=>$value )
        $directory_tree[$key] = $value;
    Une autre idée : la fonction array_merge pourrait s'avérer utile.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2003
    Messages : 271
    Points : 720
    Points
    720
    Par défaut
    merci bien. La solution parait en effet évidente. Je savais bien que mon array imbriqué était bancal.
    L'autre erreur que j ai corrigé est le in_array() qui vérifie les valeurs et non les clefs. Avec array_key_exists(), cela fonctionne bcp mieux

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

Discussions similaires

  1. Utilisation des tableaux comme paramètres pour les procédures
    Par guefrachi dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 01/10/2010, 18h50
  2. Réponses: 1
    Dernier message: 12/12/2007, 13h46
  3. Réponses: 2
    Dernier message: 18/10/2006, 11h36
  4. Réponses: 2
    Dernier message: 09/06/2006, 13h33
  5. Réponses: 4
    Dernier message: 10/05/2006, 10h36

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