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 :

ARRAY : Comment trouver une valeur d'un élément dans un tableau qui est dans un autre


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut ARRAY : Comment trouver une valeur d'un élément dans un tableau qui est dans un autre
    Bonjour,
    Avec le code suivant ($valuess_mon_array['marticule']['N']) je n'arrive pas trouver la valeur 001 ?
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
     
    $mon_array  = array(
    	array ('nom' => 'Toto','prenom' => array (),'marticule' => array (array ('class' => '001'), array ('class' => 'A') )),
    	array ('nom' => 'Tata','prenom' => array (),'marticule' => array (array ('class' => '25'), array ('class' => 'C') )),
    	array ('nom' => 'Mimi','prenom' => array (),'marticule' => array (array ('class' => '001'), array ('class' => 'B') ))
    );
     
    print_r($mon_array);
     
    echo  '<p></p>';
    foreach ($mon_array as $valuess_mon_array) {
     
    	switch($valuess_mon_array['marticule']['N']) //Notice: Undefined index: N in       on line 17 
    	{
    		case "001":
    			$traietement = '001';
    			echo 'il y a au moins un : 001<br>'; 
    			break;
     
     
    		default:
    			$traietement = '';
    			echo 'default<br>'; 
    			break;
    	}
     
     
     
     
    }
     
    	switch($traietement)
    	{
    		case "001": 
    			echo "fait le traitement 001 <br> mais un seul fois même s'il y en a plusieurs 001"; 
    			break;
     
     
    		default:
    			echo 'rien';
    			break;
    	}
     
     
     
     
     
    echo  '<br><br><br><br>';
    en plus j'ai le message d'erreur :
    Notice: Undefined index: N in
    on line 17
    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
    Par défaut
    C'est vrai qu'il n'y a pas de 'N' dans ton tableau.

    Au passage, je suppose que tu voulais écrire $traitement au lieu de traietement et 'matricule' au lieu de marticule.
    Si tu écris mal tes éléments tu vas faire des erreurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Merci pour le conseil Sabotage,

    J'ai corrigé les appellations... Par contre, je ne sais pas comment je peux trouver la solution pour mon problème.
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
    $my_array  = array(
    							array ('nom' => 'Toto','prenom' => array (),'matricule' => array (array ('classe' => '001'), array ('classe' => 'A') )),
    							array ('nom' => 'Tata','prenom' => array (),'matricule' => array (array ('classe' => '25'), array ('classe' => 'C') )),
    							array ('nom' => 'kiki','prenom' => array (),'matricule' => array (array ('classe' => '25'), array ('classe' => 'B') )),
    							array ('nom' => 'Mimi','prenom' => array (),'matricule' => array (array ('classe' => '003'), array ('classe' => 'B') ))
    						);
     
     
     
    print_r($my_array);
     
     
    echo  '<p></p>';
    foreach ($my_array as $values_my_array) {
     
    	switch($values_my_array['matricule'][0]['classe']) 
    	{
    		case "25":
    			$treatment = 25;
    			echo 'il y a au moins un : 25<br>'; 
    			break;
     
     
    		default:
    			$treatment = '';
    			echo 'default<br>'; 
    			break;
    	}
     
     
     
     
    }
     
    	switch($treatment)
    	{
    		case "25": 
    			echo "<br><p>faites le traitement 25 <br> mais un seul fois même s'il y en a plusieurs 001</p>"; 
    			break;
     
     
    		default:
    			echo '<br><p>faites pour les autres (donc en dehors de 25)</p>';
    			break;
    	}
     
     
     
     
     
    echo  '<br><br><br><br>';
    En fait, comme tu vois, ma 'classe' se trouve dans un array (la clé est numérotée sans une chaîne de caractères)(donc le tableau numéroté) qui est dans un autre (les tableaux associatifs) :
    [Array ( ) [matricule] => Array ( [0] => Array ( [classe] => 001]
    Alors avec mon 1er switch switch($values_my_array['matricule'][0]['classe'])
    J'obtiens :
    default
    il y a au moins un : 25
    il y a au moins un : 25
    default
    JUsqu'au là ça va mais par contre
    avec 2e switch (switch($treatment)) je n'obtiens que :
    faites pour les autres (donc en dehors de 25)
    Pourtant dans ma classe, il y a aussi 25
    Alors comment je peux obtenir le résultat suivant :
    faites le traitement 25
    mais un seul fois même s'il y en a plusieurs 001


    faites pour les autres (donc en dehors de 25)
    Est-ce que tu as une idée ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Je me rends compte que c'est toujours la valeur du dernier array (classe) que le 2e switch (switch($treatment)) s'affiche.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 107
    Par défaut
    Salut,

    Il est normal que tu n'obtiennes que
    faites pour les autres (donc en dehors de 25)
    puisque tu n'es plus dans ta boucle for.

    En gros, tu as ta variable $treatment (non, vraiment, tu ne voulais pas mettre $traitement ? ), et dans ta boucle, si tu rencontres 25, tu lui affectes 25. Par contre, si tu rencontres une autre valeur, tu le vide.

    La valeur de $treatment au cours de ton programme va donc faire :
    1er passage dans le for : $treatment = ''
    2eme passage dans le for : $treatment = 25
    3eme passage dans le for : $treatment = 25
    4eme passage dans le for : $treatment = ''

    Donc, quand tu fais le switch($treatment), il n'a pas de valeur.

    Maintenant, une petite explication claire de ce que tu veux faire et on pourra t'aider .

  6. #6
    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
    Par défaut
    Moi je ferrais comme ça :

    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
    19
    foreach ($my_array as $values_my_array) {
        $classe = $values_my_array['matricule'][0]['classe'];
        $traitements[$classe] = $classe;    
    }	
     
    foreach ($traitements as $value) {
    switch($value)
    	{
    		case "25": 
    			echo "<br><p>faites le traitement 25 <br> mais un seul fois même s'il y en a plusieurs 001</p>"; 
    			break;
     
     
    		default:
    			echo '<br><p>faites pour les autres (donc en dehors de 25)</p>';
    			break;
    	}
     
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 107
    Par défaut
    Ton code peut correspondre, sauf si pour les autres valeurs, le traitement doit-être lancé à chaque fois que la valeur apparait.

    Par exemple, avec un array du genre ["1", "2", "25", "25", "3", "1", "25"], il passera une fois dans le case 25, et 3 fois dans le default, alors que potentiellement, il devrait pouvoir y passer 4 fois (dont 2 fois pour le "1").

    Reste à voir l'attente de tonton.

  8. #8
    Membre éclairé
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Par défaut
    Bonjour Darkauron et Sabotage,

    Puisque vous insistez, j'ai changé $treatment par $traitements...
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
     
    $my_array  = array(
    							array ('nom' => 'Toto','prenom' => array (),'matricule' => array (array ('classe' => '001'), array ('classe' => 'A') )),
    							array ('nom' => 'Tata','prenom' => array (),'matricule' => array (array ('classe' => '25'), array ('classe' => 'C') )),
    							array ('nom' => 'kiki','prenom' => array (),'matricule' => array (array ('classe' => '25'), array ('classe' => 'B') )),
    							array ('nom' => 'Mimi','prenom' => array (),'matricule' => array (array ('classe' => '002'), array ('classe' => 'B') )),
    							array ('nom' => 'Coucou','prenom' => array (),'matricule' => array (array ('classe' => '25'), array ('classe' => 'D') )),
    							array ('nom' => 'Mimi','prenom' => array (),'matricule' => array (array ('classe' => '007'), array ('classe' => 'B') ))
    						);
     
     
     
    print_r($my_array);
     
     
     
     
    foreach ($my_array as $values_my_array) {
        $classe = $values_my_array['matricule'][0]['classe'];
        $traitements[$classe] = $classe;    
    }
     
    echo  '<p></p>';
    print_r($my_array);
    echo  '<p></p><p></p>';
     
    foreach ($traitements as $value) {
    switch($value)
    	{
    		case "25": 
    			echo "<br><p>faites le traitement 25 <br> mais un seul fois même s'il y en a plusieurs 001</p>"; 
    			break;
     
     
    		default:
    			echo '<br><p>faites pour les autres (donc en dehors de 25)</p>';
    			break;
    	}
     
    }
     
     
     
     
    echo  '<br><br><br><br>';
    Ce code marche selon les rectifications de Sabotage comme je voulais.
    Il y a trois classes 25 et on affiche un seul.

    faites pour les autres (donc en dehors de 25)


    faites le traitement 25
    mais un seul fois même s'il y en a plusieurs 001



    faites pour les autres (donc en dehors de 25)


    faites pour les autres (donc en dehors de 25)
    Par curiosité, je ne comprends pas comment cela fait : 1 seule fois avec 25 ?

    En fait, ce que je veux faire :

    S'il y a les chiffres 25 dans les classes, je vais enregistrer les données groupées dans un seul fichier XML (seulement une fois).
    C'est pour cela que je vais afficher le message "25" une seule fois. Si j'en suis capable alors je vais faire mes traitements...

    En outre, dans mes classes il n'y a que 4 (pas plus) 001, 002, 007 et 25! Donc je dois éliminer les 3 qui ne sont pas 25

    Merci encore

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2010, 16h13
  2. Réponses: 4
    Dernier message: 25/11/2009, 10h46
  3. Réponses: 2
    Dernier message: 22/03/2009, 21h06
  4. Comment trouver une valeur dans un tableau ?
    Par wizou44 dans le forum Excel
    Réponses: 20
    Dernier message: 29/08/2008, 10h57
  5. Réponses: 8
    Dernier message: 04/04/2007, 12h22

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