Php ile bir dizi depolamak nesneleri

3 Cevap php

Ben bir veritabanından satırları çeker bir işlevi, içerik-> id ve bunları dinamik nesneler bilgi almak ve biçimlendirmek için zaten yüklü modelde amethod aramak için kullanılan içerik-> türü var. Nesne döndürülür kez dizisine eklenir. Tüm i bunun öğelerin doğru sayıda olmasına rağmen dizi kullanmak için geldiğinde, hepsi onlar farklı verdiğini bilmek bile aynı nesneyi içermesi haricinde iyi. Bu bir tam bir kaybı Im, herhangi bir yardım / fikirler harika whould!

Kod aşağıda:

foreach($query->result() as $content)
{
    $item = $this->{'mod_'.$content->type}->get($content->id);
    print_r($item);
    $items[] = $item;
}
print_r($items);

Ve print_r ifadeler bu üretmek:

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 Cevap

Ben sorun sonuçlanan, diziye aynı nesneye her zaman by reference ekleyin ardından get işlevi ve by reference almak olduğunu tahmin ediyorum öğesi get işlevi değiştirilmiş aldığında dizideki tüm öğeler modifiye ediliyor. Bu durumda, aşağıdaki çalışması gerekir:

foreach($query->result() as $content)
{
    $item = $this->{'mod_'.$content->type}->get($content->id);
    print_r($item);
    $items[] = clone $item;
}
print_r($items);

Eğer $ öğelere $ öğeyi bastığınızda, o kadar değer $ madde puan ziyade başvuru kendisi itmek değil. Sen $ Ürünü her zaman başlatmak gerekir:

foreach($query->result() as $content)
{
    $item = new stdClass();
    $item = $this->{'mod_'.$content->type}->get($content->id);
    print_r($item);
    $items[] = $item;
}
print_r($items);

Muhtemelen öğe değil öğeleri kendilerini başvurular iade edilir. Her zaman ki $ madde puan için son başvuru olacaktır.