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] Récupération d'un élément de tableau par référence


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut [Tableaux] Récupération d'un élément de tableau par référence
    Bonjour à tous!

    Voilà, je cherche un moyen de faire un traitement le plus optimisé possible.

    En gros typiquement j'ai des données de type objets contenues dans une matrice (array d'arrays), et j'y accède de deux manières, soit par le type, soit par l'id. Donc deux méthodes getID(), et getType(). Etant donné que j'utilise plus souvent le getType() j'ai décidé de les classer de cette manière, comme j'ai 8 types différents, mon array principal contient les clés des types qui pointent vers les arrays contenant les données.

    J'aimerais à un moment X pouvoir ajouter ou retirer une donnée de cette matrice, et pour retirer cette donnée je passe par l'ID, mais j'ai besoin d'avoir cette donnée sous la main un moment pour traitement avant de la supprimer complètement, donc pour essayer de résumer parce que je m'étale, j'ai fait une fonction qui me récupère la donnée dans le tableau par référence pour pouvoir ensuite traiter cette donnée, et faire un unset() qui me supprime la donnée directement dans le tableau sans avoir à reparcourir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static function &extractItem($items,$id){
    	for ($type = 0 ; $type < 9 ; $type++) 
    		if ($items[$type] != null)
    			foreach ($items[$type] as &$item)
    				if ($item->getID() == $id)
    					return $item;
    }
    Voilà donc ma fonction, mais à la sortie de celle ci quand après traitement je fais unset($item) avec $item = extractItem($monarray,$monid), ça ne marche pas...

    Je ne sais pas si vous voyez le problème où si vous avez une autre solution à me conseiller parce que je sais que le passage par ref. est pas forcément idéal, et pour tout dire y'a pas vraiment de bonne doc sur le sujet (en tout cas que je connaisse).

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Si j'ai bien tout suivi tu veux passer un tebleau en paramètre à ta fonction et que si ta fonction fait des traitements sur ce tableau alors tu veux que les modifications soient répercutés dans le script appelant c'est ça ?

    Dans ce cas c'est plutôt ceci que tu dois faire : public static function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extractItem(&$items,$id){
    	for ($type = 0 ; $type < 9 ; $type++) 
    		if ($items[$type] != null)
    			foreach ($items[$type] as &$item)
    				if ($item->getID() == $id)
    					return $item;
    }
    Si tu ne l'as pas déjà lu : http://php.net/manual/fr/language.references.pass.php

  3. #3
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Je l'avais lu si mais justement là tel quel j'ai bien peur que j'ai besoin de plus que le traitement interne.

    En fait réellement il n'y a aucun traitement interne dans ma fonction, comme tu peux le voir, je cherche juste à récupérer un élément X, et j'aimerais lorsque je quitte cette fonction pouvoir supprimer cet élément X et qu'il soit supprimé dans l'array passé en paramètre.

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extractItem(&$items,$id){
    	for ($type = 0 ; $type < 9 ; $type++) 
    		if ($items[$type] != null)
    			foreach ($items[$type] as $item)
    				if ($item->getID() == $id)
    					unset($item);
    }

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/04/2007, 15h18
  2. Réponses: 4
    Dernier message: 20/03/2007, 19h28
  3. Réponses: 2
    Dernier message: 02/08/2006, 15h11
  4. Réponses: 5
    Dernier message: 14/02/2006, 18h52

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