J'ai une fonction qui tire des lignes d'une base de données, le contenu -> ID et le contenu -> sont utilisés pour appeler dynamiquement AMETHOD dans un modèle déjà chargé pour obtenir et formater les détails des objets. Une fois que l'objet est renvoyé, il est ajouté au tableau. Tout va bien, sauf que lorsque je viens utiliser le tableau bien qu'il ait le nombre correct d'éléments dedans, ils contiennent tous le même objet même si je sais qu'ils sont retournés différents. Je suis à une perte complète avec celle-ci, toute aide / idées serait géniale!
Le code est ci-dessous: p> et les instructions print_r produisent ceci: p > stdClass Object
(
[id] => 30
[type] => page
)
stdClass Object
(
[id] => 29
[type] => page
)
Array
(
[0] => stdClass Object
(
[id] => 29
[type] => page
)
[1] => stdClass Object
(
[id] => 29
[type] => page
)
)
3 Réponses :
Vous retournez probablement des références à l'article, pas les articles eux-mêmes. Ce sera toujours la dernière référence que le point de $ pointe de l'article. p>
Je suppose que le problème est que vous arrivez au même objet chaque fois que par référence em> à partir de la fonction code> est code> puis ajoutez-le par référence EM> Pour le tableau, ce qui permet de modifier tous les éléments de la matrice lorsque l'élément est modifié dans la fonction get code>. Si tel est le cas, les éléments suivants doivent fonctionner:
foreach($query->result() as $content)
{
$item = $this->{'mod_'.$content->type}->get($content->id);
print_r($item);
$items[] = clone $item;
}
print_r($items);
Lorsque vous appuyez sur $ d'article sur $ d'éléments, il ne pousse pas la valeur $ Points d'article, mais plutôt la référence elle-même. Vous aurez besoin d'initialiser chaque article à chaque fois:
foreach($query->result() as $content) { $item = new stdClass(); $item = $this->{'mod_'.$content->type}->get($content->id); print_r($item); $items[] = $item; } print_r($items);
Je pensais que quelque chose comme ça serait le problème, mais l'initialisation à chaque fois que cela ne fonctionne pas. $ items [] = clone ($ article) a cependant
Au deuxième examen, il est facile de comprendre pourquoi cette méthode ne fonctionnera pas; $ Les éléments sont un tableau rempli de $, qui est toujours une référence. Reinitialiser $ Article signifie que tous les articles feront toujours référence au même objet. Comme dit ci-dessus, clone () est le chemin :)
Est-ce une vraie pâte de copie de votre code?