J'essaie de pousser des objets dans un tableau pour finir avec un tableau d'objets comme celui-ci:
array(1) { [0]=> object(stdClass)#2 (2) { ["recipient_name"]=> string(12) "First Person" ["phone_number"]=> string(9) "112233445" } } array(2) { [0]=> object(stdClass)#2 (2) { ["recipient_name"]=> string(13) "Second Person" ["phone_number"]=> string(9) "123456789" } [1]=> object(stdClass)#2 (2) { ["recipient_name"]=> string(12) "Second Person" ["phone_number"]=> string(9) "123456789" } } array(3) { [0]=> object(stdClass)#2 (2) { ["recipient_name"]=> string(16) "Third Person" ["phone_number"]=> string(9) "012345678" } [1]=> object(stdClass)#2 (2) { ["recipient_name"]=> string(16) "Third Person" ["phone_number"]=> string(9) "012345678" } [2]=> object(stdClass)#2 (2) { ["recipient_name"]=> string(16) "Third Person" ["phone_number"]=> string(9) "012345678" } } array(4) { ... // it just overwriting the data with duplicates }
Donc je boucle sur un plus grand tableau pour acquérir les noms et les numéros de téléphone et les pousser en tant qu'objet dans un tableau comme celui-ci:
$myLargerArray = pg_fetch_all($messageQuery); // This is my larger array $size = count($myLargerArray); for( $j = 0; $j < $size; $j++ ) { $myRecipientsObj->recipient_name = $myLargerArray[$j]['recipient_name']; $myRecipientsObj->phone_number = $myLargerArray[$j]['phone_number']; var_dump($myRecipientsObj); // This outputs the correct data added from [$j] array_push($myObjArray->message_recipients, $myRecipientsObj); var_dump($myObjArray->message_recipients); // The output shows array elements are being overwritten at each loop iteration }
Voici un exemple de la façon dont le dernier var_dump ($ myObjArray-> message_recipients)
ressemble à:
[ {"recipient_name":"John D", "phone_number":"123456"}, {"recipient_name":"Doe J", "phone_number":"654321"}, {"recipient_name":"Jon Do", "phone_number":"112233"}, ]
Qu'est-ce que je fais de mal pour causer ceci et comment puis-je le contourner?
3 Réponses :
Vous pouvez écrire directement [] devant les destinataires du message comme ci-dessous,
$myObjArray->message_recipients = []; for ($j = 0; $j < $size; $j++) { $myRecipientsObj = new stdClass; // created std class object $myRecipientsObj->recipient_name = $myLargerArray[$j]['recipient_name']; $myRecipientsObj->phone_number = $myLargerArray[$j]['phone_number']; $myObjArray->message_recipients[] = $myRecipientsObj; }
Cela devrait fonctionner.
Fonctionnement démo
Laisse-moi essayer ça. Bien qu'il soit intéressant de mentionner que je l'avais déjà initialisé en tant que tableau $ myObjArray-> message_recipients = Array ();
C'est parce que lorsque vous utilisez:
array_push($myObjArray->message_recipients, clone $myRecipientsObj);
vous poussez une référence à l'objet dans le tableau, et lorsque vous changez ensuite l'objet lors des passages suivants dans la boucle, vous changez effectivement le contenu de chaque élément du tableau. Pour contourner ce problème, vous devez à la place pousser une copie de l'objet dans le tableau:
array_push($myObjArray->message_recipients, $myRecipientsObj);
Wow, celui-ci a fonctionné. Je n'aurais jamais pensé au clonage principalement depuis que je pensais que pousser dans un tableau fonctionne comme son homologue JS
$myObjArray->message_recipients[] = \DeepCopy\deep_copy($myRecipientsObj);
Pouvez-vous s'il vous plaît ajouter une description