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 :

Unset dans un foreach


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut Unset dans un foreach
    Bonjour,

    j'ai un souci avec les tableaux, pour faire simple je me suis fait un petit test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $tableau1 = array('0','1','2');
    $tableau2 = array('test0','test1','test2','1','3','4');
    foreach ($tableau1 as $key1 => $value1) {
    	foreach ($tableau2 as $key2 => $value2	) {
    		if ($value2 == 'test1') {
    			unset($tableau1[2]);
    			echo "tableau1 = ";print_r($tableau1);echo "<br>";
    		}
    	}
    }
    echo "APRES<br>tableau1 = ";print_r($tableau1);echo "<br>";
    echo "tableau2 = ";print_r($tableau2);echo "<br>";
    Mon problème est que lorsque je fais unset($tableau1[2]);, ça supprime bien l'élément dans le tableau, mais la 1ère boucle foreach parcourt quand même $tableau1[2]
    Est-ce possible que la boucle foreach prenne en compte la modification du tableau 1 ?

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut passer le tableau par référence à foreach ; sinon il parcourt une copie qui n'est effectivement pas affecté par les modifications en cours de route.

  3. #3
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    Il faut passer le tableau par référence à foreach
    ce qui donne ceci :
    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
    $tableau1 = array('0','1','2');
    $tableau2 = array('test0','test1','test2','1','3','4');
    echo "AVANT<br>tableau1 = ";print_r($tableau1);echo "<br>";
    echo "tableau2 = ";print_r($tableau2);echo "<br>";
    foreach ($tableau1 as $key1 => &$value1) {
    	foreach ($tableau2 as $key2 => $value2	) {
    		echo "value1 = " . $value1 . " et value2 = ".$value2 . "<br>";
    		if ($value2 == 'test1') {
    			unset($tableau1[2]);
    			echo "tableau1 = ";print_r($tableau1);echo "<br>";
    		}
    	}
    }
    echo "APRES<br>tableau1 = ";print_r($tableau1);echo "<br>";
    echo "tableau2 = ";print_r($tableau2);echo "<br>";
    merci !!

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

Discussions similaires

  1. [Boucle] Ordre des Controls dans un ForEach
    Par Djekill dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/12/2007, 10h38
  2. [Tableaux] Message d'erreur dans un foreach
    Par maysa dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2007, 11h45
  3. [JSTL] Checkboxes dans un foreach
    Par BadIsGood dans le forum Taglibs
    Réponses: 2
    Dernier message: 29/06/2007, 18h58
  4. [C#]utilisation de variables contenu dans un foreach
    Par beufreecasse dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/11/2006, 20h42
  5. Problème de variable dans un foreach
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/05/2006, 16h57

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