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 :

boucle for tableau mutimensionnel et indices conditionnés


Sujet :

Langage PHP

  1. #1
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut boucle for tableau mutimensionnel et indices conditionnés
    Bonjour,

    J'ai un probleme sur lequel je m'arrache les cheveux depuis de longues heures. Voici mon probleme :

    J'ai un tableau array1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    array:5 [0 => array:3 []
      1 => array:3 []
      2 => array:3 []
      3 => array:3 []
      4 => array:3 []
    ]
    Dans ce tableau j'ai d'autres tableaux composés de 3 tableaux chacun :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    ^ array:5 [0 => array:3 ["linkElement" => array:5 [0 => "LinkElement1"
          1 => "LinkElement2"
          2 => "LinkElement3"
          3 => "LinkElement4"
          4 => "LinkElement5"
        ]
        "linkText" => array:5 [0 => "linkText1"
          1 => "linkText2"
          2 => "linktext3"
          3 => "linkText4"
          4 => "linkText5"
        ]
        "articleText" => array:5 [0 => " articletext1"
          1 => " articletext2"
          2 => " articletext3"
          3 => " articletext4"
          4 => " articletext5"
        ]
      ]
      1 => array:3 ["linkElement" => array:5 [0 => "LinkElement6"
          1 => "LinkElement7"
          2 => "LinkElement8"
          3 => "LinkElement9"
          4 => "LinkElement10"
        ]
        "linkText" => array:5 [0 => "linkText6"
          1 => "linkText7"
          2 => "linktext8"
          3 => "linkText9"
          4 => "linkText10"
        ]
        "articleText" => array:5 [0 => " articletext6"
          1 => " articletext7"
          2 => " articletext8"
          3 => " articletext9"
          4 => " articletext10"
        ]
      ]
      2 => array:3 ["linkElement" => array:5 [0 => "LinkElement11"
          1 => "LinkElement12"
          2 => "LinkElement13"
          3 => "LinkElement14"
          4 => "LinkElement15"
        ]
        "linkText" => array:5 [0 => "linkText11"
          1 => "linkText12"
          2 => "linktext13"
          3 => "linkText14"
          4 => "linkText15"
        ]
        "articleText" => array:5 [0 => " articletext11"
          1 => " articletext12"
          2 => " articletext13"
          3 => " articletext14"
          4 => " articletext15"
        ]
      ]
      3 => array:3 ["linkElement" => array:5 [0 => "LinkElement16"
          1 => "LinkElement17"
          2 => "LinkElement28"
          3 => "LinkElement19"
          4 => "LinkElement20"
        ]
        "linkText" => array:5 [0 => "linkText16"
          1 => "linkText17"
          2 => "linktext18"
          3 => "linkText19"
          4 => "linkText20"
        ]
        "articleText" => array:5 [0 => " articletext16"
          1 => " articletext17"
          2 => " articletext18"
          3 => " articletext19"
          4 => " articletext20"
        ]
      ]
      4 => array:3 ["linkElement" => array:5 [0 => "LinkElement21"
          1 => "LinkElement22"
          2 => "LinkElement23"
          3 => "LinkElement24"
          4 => "LinkElement25"
        ]
        "linkText" => array:5 [0 => "linkText21"
          1 => "linkText22"
          2 => "linktext23"
          3 => "linkText24"
          4 => "linkText25"
        ]
        "articleText" => array:5 [0 => " articletext21"
          1 => " articletext22"
          2 => " articletext23"
          3 => " articletext24"
          4 => " articletext25"
        ]
      ]
    ]
    Ce qui m'intéresse de faire de faire c'est de récupérer chaque élément de chaque clé ("LinkElement", "Linktext" et "articleText") pour initialiser des setters.
    Voici le code que j'ai construit pour essayer de faire ça, ça sera certainement plus parlant :
    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
     
    foreach($results as $result)
            {
     
                $article = new Liens();
     
                foreach($result as $k => $element)
                { 
     
                        if($k === "linkElement")
                        {
                            foreach($element as $article_element)
                            {
                                $article->setLinkElement($article_element;
                            }   
                        }
                        if($k === "linkText")
                        {
                            foreach($element as $article_element)
                            {
                                $article->setLinkText($article_element);
                            }   
                        }
                        if($k === 'articleText')
                        {
                            foreach($element as $article_element)
                            {
                                $article->setArticleText($article_element);
                            }   
                        }
                        $article->setCreatedAt(date('Y-m-d H:i:s'));
                        $article->setClubID("1");
                }
     
                $articles[] = $article;
    Ce code fonctionne apparemment bien, saut qu'il me renvoie un tableau uniquement des derniers objets instanciés alors que je voudrais tous les objets. Je devrai en avoir 25 objets alors que ce code m'en retourne que 5.
    Voici ce que j'obtiens:
    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
     
     ^ array:5 [0 => App\Model\Liens {#4253 ▼
        +id: null
        +linkElement: "LinkElement5"
        +linkText: "LinkText5"
        +articleText: "articleText5"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
      1 => App\Model\Liens {#4241 ▼
        +id: null
        +linkElement: "LinkElement10"
        +linkText:"LinkText10"
        +articleText: "articleText10"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
      2 => App\Model\Liens {#957 ▼
        +id: null
        +linkElement: "LinkElement15
        +linkText:"LinkText15"
        +articleText: "articleText15"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
      3 => App\Model\Liens {#4235 ▼
        +id: null
        +linkElement: "LinkElement20"
        +linkText:"LinkText20"
        +articleText: "articleText20"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
      4 => App\Model\Liens {#4234 ▼
        +id: null
        +linkElement: "LinkElement25"
        +linkText:"LinkText25"
        +articleText: "articleText25"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
    ]
        }
    voici ce que je souhaite obtenir:
    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
     
     ^ array:25 [0 => App\Model\Liens {#4253 ▼
        +id: null
        +linkElement: "LinkElement1"
        +linkText: "LinkText1"
        +articleText: "articleText1"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
      1 => App\Model\Liens {#4241 ▼
        +id: null
       +linkElement: "LinkElement2"
        +linkText: "LinkText2"
        +articleText: "articleText2"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
      2 => App\Model\Liens {#957 ▼
        +id: null
        +linkElement: "LinkElement3
        +linkText:"LinkText3"
        +articleText: "articleText3"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
      3 => App\Model\Liens {#4235 ▼
        +id: null
        +linkElement: "LinkElement4"
        +linkText:"LinkText4"
        +articleText: "articleText4"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
    [...]
      25=> App\Model\Liens {#4234 ▼
        +id: null
        +linkElement: "LinkElement25"
        +linkText:"LinkText25"
        +articleText: "articleText25"
        +created_at: "2020-02-09 10:41:05"
        +club_id: "1"
      }
    ]
    Merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Mets un chapeau, ou une perruque.

    2- Montre-nous des "vrai" array PHP, qu'on peut TESTER.
    et/ou
    Mets des va_dump dans ton script, pour savoir ce qui est traité, ce que contient les variables,....


    A vue de nez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($results as $result)
    {
         foreach($result as $k => $r)
         { 
               $article = new Liens();
    Conseil : évite d'utiliser des variables comme $k, $r, $o,... qui ne veulent rien dire.
    Mets des noms plus "parlants" : ce sera plus simple à comprendre / déboguer.

  3. #3
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut
    J'avais déjà essayé ce que tu proposes et ce la me donne ce résultat :

    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
     
    ^ array:5 [0 => App\Model\Liens {#4269 ▼
        +id: null
        +linkElement: null
        +linkText: null
        +articleText: " Les couleurs bleus sont fragiles ▶"
        +created_at: "2020-02-09 10:07:39"
        +club_id: "1"
      }
      1 => App\Model\Liens {#4247 ▼
        +id: null
        +linkElement: null
        +linkText: null
        +articleText: "La vengeance est le courage des faibles"."
        +created_at: "2020-02-09 10:07:39"
        +club_id: "1"
      }
      2 => App\Model\Liens {#957 ▼
        +id: null
        +linkElement: null
        +linkText: null
        +articleText: "l'inutilité des pouvoirs publics bat son plein"
        +created_at: "2020-02-09 10:07:39"
        +club_id: "1"
      }
      3 => App\Model\Liens {#4237 ▼
        +id: null
        +linkElement: null
        +linkText: null
        +articleText: " Chaque fois que j'y pense je m'en dors"
        +created_at: "2020-02-09 10:07:39"
        +club_id: "1"
      }
      4 => App\Model\Liens {#4236 ▼
        +id: null
        +linkElement: null
        +linkText: null
        +articleText: " Les poètes sont les artistes de l'âme"
        +created_at: "2020-02-09 10:07:39"
        +club_id: "1"
      }
    ]
    Je reste qu'avec 5 instances et partiellement initialisées.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Toujours au pif, puisque tu ne donnes pas d'exemple d'array à traiter :
    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
    foreach($results as $result)
    {
    	foreach($result as $k => $element)
    	{ 
    		foreach($element as $article_element)
    		{
    			$article = new Liens();
    			if($k === "linkElement")
    			{
    				$article->setLinkElement($article_element;
    			}
    			elseif($k === "linkText")
    			{
    				$article->setLinkText($article_element);
    			}
    			elseif($k === 'articleText')
    			{
    				$article->setArticleText($article_element);
    			}   
    			$article->setCreatedAt(date('Y-m-d H:i:s'));
    			$article->setClubID("1");
     
    			$articles[] = $article;
    		}
    	}
    }

  5. #5
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut
    Cela donne me retourne le meme résultat que ton précédent message.

  6. #6
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut
    Pour que cela soit plus parlant, j'ai modifié mon premier message avec ce que j'obtiens et ce que je souhaite obtenir.

    Merci de votre aide car je bloque complet. Je sais que je suis pas loin du résultat mais je n'arrive pas à obtenir mon tableau avec toutes les instances de mon objet.

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,

    ce que j'aurais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $articles = [];
    foreach ($results as $liens) {
        ['linkElement' => $elem, 'linkText' => $txt, 'articleText' => $art] = $liens;
        array_walk($elem, function($v, $k) use (&$articles, $txt, $art) {
            $article = new Liens();
            $article->setLinkElement($v);
            $article->setLinkText($txt[$k]);
            $article->setArticleText($art[$k]);
            $article->setCreatedAt(date('Y-m-d H:i:s'));
            $article->setClubID("1");
            $articles[] = $article;
        });
    }
    comme toujours, rien testé : ça sort du four.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Après avoir reconstruit l'array (et en supposant que ce soit bien ç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
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    $results = [
    	0 => [
    		"linkElement" => [
    			0 => "LinkElement1",
    			1 => "LinkElement2",
    			2 => "LinkElement3",
    			3 => "LinkElement4",
    			4 => "LinkElement5",
    		],
    		"linkText" => [
    			0 => "linkText1",
    			1 => "linkText2",
    			2 => "linktext3",
    			3 => "linkText4",
    			4 => "linkText5",
    		],
    		"articleText" => [
    			0 => " articletext1",
    			1 => " articletext2",
    			2 => " articletext3",
    			3 => " articletext4",
    			4 => " articletext5",
    		],
    	],
    	1 => [
    		"linkElement" => [
    			0 => "LinkElement6",
    			1 => "LinkElement7",
    			2 => "LinkElement8",
    			3 => "LinkElement9",
    			4 => "LinkElement10",
    		],
    		"linkText" => [
    			0 => "linkText6",
    			1 => "linkText7",
    			2 => "linktext8",
    			3 => "linkText9",
    			4 => "linkText10",
    		],
    		"articleText" => [
    			0 => " articletext6",
    			1 => " articletext7",
    			2 => " articletext8",
    			3 => " articletext9",
    			4 => " articletext10",
    		],
    	],
    	2 => [
    		"linkElement" => [
    			0 => "LinkElement11",
    			1 => "LinkElement12",
    			2 => "LinkElement13",
    			3 => "LinkElement14",
    			4 => "LinkElement15",
    		],
    		"linkText" => [
    			0 => "linkText11",
    			1 => "linkText12",
    			2 => "linktext13",
    			3 => "linkText14",
    			4 => "linkText15",
    		],
    		"articleText" => [
    			0 => " articletext11",
    			1 => " articletext12",
    			2 => " articletext13",
    			3 => " articletext14",
    			4 => " articletext15",
    		],
    	],
    	3 => [
    		"linkElement" => [
    			0 => "LinkElement16",
    			1 => "LinkElement17",
    			2 => "LinkElement28",
    			3 => "LinkElement19",
    			4 => "LinkElement20",
    		],
    		"linkText" => [
    			0 => "linkText16",
    			1 => "linkText17",
    			2 => "linktext18",
    			3 => "linkText19",
    			4 => "linkText20",
    		],
    		"articleText" => [
    			0 => " articletext16",
    			1 => " articletext17",
    			2 => " articletext18",
    			3 => " articletext19",
    			4 => " articletext20",
    		],
    	],
    	4 => [
    		"linkElement" => [
    			0 => "LinkElement21",
    			1 => "LinkElement22",
    			2 => "LinkElement23",
    			3 => "LinkElement24",
    			4 => "LinkElement25",
    		],
    		"linkText" => [
    			0 => "linkText21",
    			1 => "linkText22",
    			2 => "linktext23",
    			3 => "linkText24",
    			4 => "linkText25",
    		],
    		"articleText" => [
    			0 => " articletext21",
    			1 => " articletext22",
    			2 => " articletext23",
    			3 => " articletext24",
    			4 => " articletext25",
    		],
    	],
    ];
    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
    <?php
    $articles = [];
    foreach($results as $result)
    {
    	foreach($result['linkElement'] as $key => $val)
    	{ 
    		$article = new Liens();
    		$article->setLinkElement($result['linkElement'][$key]);
    		$article->setLinkText($result['linkText'][$key]);
    		$article->setArticleText($result['articleText'][$key]);
    		$article->setCreatedAt(date('Y-m-d H:i:s'));
    		$article->setClubID("1");
     
    		$articles[] = $article;
    	}
    }
    var_dump( $articles );

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Après avoir reconstruit l'array
    je n'ai pas eu ce courage là

  10. #10
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 506
    Billets dans le blog
    1
    Par défaut
    Bande de feignasses , je suis battu dans l'art de donner du travail...

  11. #11
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2019
    Messages : 45
    Par défaut
    merci 🙏 pour le temps passé et ton aide. Ta solution marche nickel 👌.

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

Discussions similaires

  1. [Débutant] Boucle for en enlevant un indice.
    Par abel413 dans le forum MATLAB
    Réponses: 9
    Dernier message: 16/07/2013, 09h04
  2. Boucle for + tableau
    Par mick-67 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 03/05/2011, 15h43
  3. la boucle for,pour juste certain indice
    Par Medoou dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/07/2009, 14h45
  4. [VB.net] Boucle for next avec un tableau
    Par grand_prophete dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h08
  5. boucle for n fois pour n tableau...
    Par toyyo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/08/2005, 16h01

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