Stocker des objets dans un tableau php
J'ai une fonction qui tire des lignes à partir d'une base de données, le contenu->id et le contenu->type sont utilisés pour appeler de manière dynamique amethod dans une déjà chargés modèle et le format des objets de détails. Une fois que l'objet est retourné, il est ajouté à la matrice. Tout est bien sauf que quand je viens pour utiliser le tableau, bien qu'il a le bon nombre d'éléments qu'il contient, ils contiennent tous le même objet, même si je sais qu'ils sont retournés différents. Im à une perte complète avec celui-ci, toute aide/idées devrait être de grands!
Le code est ci-dessous:
foreach($query->result() as $content)
{
$item = $this->{'mod_'.$content->type}->get($content->id);
print_r($item);
$items[] = $item;
}
print_r($items);
Et le print_r états produire ceci:
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
)
)
Est-ce un vrai copier-coller de votre code?
OriginalL'auteur Paul Dixon | 2009-06-30
Vous devez vous connecter pour publier un commentaire.
Je suppose que le problème est que vous obtenez de la même objet à chaque fois par référence de la
get
la fonction, puis l'ajouter par référence au tableau, ce qui dans tous les éléments du tableau en cours de modification lorsque l'élément se modifie dans leget
fonction. Si c'est le cas, la suivante devrait fonctionner:OriginalL'auteur Mikael Auno
Lorsque vous appuyez $point $éléments, il ne pousse pas la valeur de $item points, mais plutôt la référence elle-même. Vous aurez besoin d'initialiser $item à chaque fois:
Sur le deuxième examen, il est facile de comprendre pourquoi cette méthode ne fonctionnera pas; $articles est un tableau rempli de $item, ce qui est toujours une référence. La réinitialisation de $item signifie que tous les objets font référence au même objet. Comme dit ci-dessus, clone() est la voie 🙂
OriginalL'auteur MoshiBin
Vous êtes probablement le retour par référence à l'article, pas les articles eux-mêmes. Il sera toujours la dernière référence que $item points.
OriginalL'auteur cgp