1
votes

foreach ne renvoie que le dernier élément comment récupérer tous les éléments

J'ai ce code:

 366 367 368 369 370 371 372 373 374

et le print_r imprime ces valeurs:

if(is_array($body)){
        foreach ($body as $key => $member) {
            $contacts = $member->id;
            print_r($contacts);
        }
        return $contacts;
    }

mais il ne renvoie que la valeur 374 pourquoi? Je veux d'abord qu'il renvoie 366 puis 367 puis 368 .... et ainsi de suite. ce qui me manque?


1 commentaires

Je pense qu'il y a un malentendu fondamental sur le fonctionnement d'une instruction return dans une fonction . Il ne peut y avoir qu'un seul retour par fonction. Ainsi, lorsque vous appelez une fonction une seule fois, vous ne pourrez pas obtenir le comportement souhaité en obtenant 366, puis 367 et ainsi de suite. Vous avez quelques choix: 1) aller avec les solutions de tableau suggérées par les autres 2) faire votre logique pour chaque élément dans la boucle foreach . 3) reconcevez votre fonction. php.net/manual/en/function.return.php < a href = "https://www.php.net/manual/en/function.array.php" rel = "nofollow noreferrer"> php.net/manual/en/function.array.php php.net/manual/en/control-structures.foreach.php


6 Réponses :


-1
votes
if(is_array($body)){
    $contacts = array();
    foreach ($body as $key => $member) {
      $contacts[] = $member->id;        
    }   
    return $contacts;
}
if you return only $contacts, it only gets one value.

3 commentaires

veuillez éviter de n'écrire que du code dans la réponse. Veuillez l'expliquer pour le rendre plus compréhensible.


Je mets à jour ma réponse, puis réessaye.


Maintenant, vous obtenez un tableau.



0
votes

Dans la boucle, vous imprimez chaque nombre.

Mais dans $ contacts il n'y a toujours que le dernier numéro. $ contacts n'est pas un tableau.

Essayez $ contacts [] = $ member-> id;


0 commentaires

0
votes

Votre code doit être:

 $contacts = array();
    if(is_array($body)){

            foreach ($body as $key => $member) {
                $contacts[] = $member->id;
                //print_r($contacts);
            }
          //return $contacts;
        }
    print_r($contacts);

Il n'est pas nécessaire d'utiliser return s'il n'y a pas de fonction.


0 commentaires

0
votes

Tout d'abord, laissez-moi vous expliquer votre code. vous souhaitez afficher un tableau d'identifiant de membre. donc dans votre code, vous devez déclarer le tableau $ contract et y pousser $ member-> id en boucle. mais dans votre code, vous ne le poussez pas, vous réaffectez simplement $ member-> id à chaque fois en boucle pour expliquer pourquoi il n'affichera que le dernier $ member-> id .

votre code devrait devenir ci-dessous.

if(is_array($body)){
    // declared $contacts as array
    $contacts = []; 

    foreach ($body as $key => $member) {
        // push memberId to contracts array
        $contacts[] = $member->id;
    }

    print_r($contacts);
}


0 commentaires

1
votes

0 commentaires

0
votes

Vous devez créer une variable avec un tableau vide (par exemple $ memberIds ), puis dans la boucle foreach, ajouter la valeur du membre / contact en boucle au tableau. Dans votre cas, vous n'ajoutez pas d'identifiants à la variable $ contacts , mais changez toujours la valeur d'origine.

La meilleure solution pour vous peut donc ressembler à:

if(is_array($body)){
    $contacts = []; // defining empty array
    foreach ($body as $key => $member) {
        $contacts[] = $member->id; // appending member's id to the array of contacts
    }
    print_r($contacts); // Now you can print all ID's
}

Faites-moi savoir en cas de questions supplémentaires :)


0 commentaires