Düzgün bir görev olması beklenen şeyleri gidermek için çok fazla saat geçtikten sonra, açık bir kusuru kaçırdığımı veya çalışmanın nasıl hatalı bir zihinsel model oluşturduğuna inanıyorum .Yeni Değerli Tekrarlanan Nesnelerin PHP Dizisini Yeniden Yapılandırma
Gerçek verilerim çok daha karmaşıktır, ancak bu örnek için bunu basitleştirdim.
Ben yeni bir özellik hesaplamak için kendi değerlerinden birini kullanın, her nesnenin üzerinden gitmek istiyorum$object1 = new stdClass();
$object1->valueA = 'abc';
$object1->valueB = 'def';
$object1->valueC = '20160410';
$object2 = new stdClass();
$object2->valueA = '123';
$object2->valueB = '456';
$object2->valueC = '20160408';
$object3 = new stdClass();
$object3->valueA = 'foo';
$object3->valueB = 'bar';
$object3->valueC = '20160412';
$my_array = array(
'X' => $object1,
'Y' => $object2,
'Z' => $object3
);
sonra kullanarak, yeni bir diziye nesneyi atayın:
ı nesneler dizisi $my_array
var diyelim onları gruplandırmak için yeni hesap değeri.
Ben öyle yaptım: Ben Konsolu çıkan dizi oturum halinde
$new_array= array();
foreach($my_array as $key=>$obj){
for($i=0;$i<=2;$i++){ //the real use case uses a slightly different loop, this is simpler/shorter for an example
$date = $obj->valueC + $i; //use valueC and the loop to calculate a new value
$obj->date = $date; //add my new value to the object
$new_array[$date][$key] = $obj; //construct new array of arrays of objects. bits on bits on bytes.
}
}
, bu şuna benzer:
[04-Apr-2016 22:09:28 UTC] Array
(
[20160410] => Array
(
[X] => stdClass Object
(
[valueA] => abc
[valueB] => def
[valueC] => 20160410
[date] => 20160412
)
[Y] => stdClass Object
(
[valueA] => 123
[valueB] => 456
[valueC] => 20160408
[date] => 20160410
)
)
[20160411] => Array
(
[X] => stdClass Object
(
[valueA] => abc
[valueB] => def
[valueC] => 20160410
[date] => 20160412
)
)
[20160412] => Array
(
[X] => stdClass Object
(
[valueA] => abc
[valueB] => def
[valueC] => 20160410
[date] => 20160412
)
[Z] => stdClass Object
(
[valueA] => foo
[valueB] => bar
[valueC] => 20160412
[date] => 20160414
)
)
[20160408] => Array
(
[Y] => stdClass Object
(
[valueA] => 123
[valueB] => 456
[valueC] => 20160408
[date] => 20160410
)
)
[20160409] => Array
(
[Y] => stdClass Object
(
[valueA] => 123
[valueB] => 456
[valueC] => 20160408
[date] => 20160410
)
)
[20160413] => Array
(
[Z] => stdClass Object
(
[valueA] => foo
[valueB] => bar
[valueC] => 20160412
[date] => 20160414
)
)
[20160414] => Array
(
[Z] => stdClass Object
(
[valueA] => foo
[valueB] => bar
[valueC] => 20160412
[date] => 20160414
)
)
)
Şimdi, $ new_array beklenebilir [ '20160410'] ['X'] -> tarihin 20160410
olması. Sonuçta, 2 satır içinde, "bu değeri üst düzey dizi anahtarı olarak ve ayrıca nesnede değer olarak kullan" dedim. Ama ne yaparsam yapayım, ['X']
'un tüm örnekleri aynı date
değerine sahip olacak. ['Y']
ve ['Z']
için aynıdır.
Amacım, bu değeri gruplama anahtarı olarak kullanırken yeni hesaplanan date
değerini saklayabilmektir.
Fark ettiniz ki, tüm değerler dizinizin her nesnesi için aynıdır. Bir sonraki adım, kodunuzda kullandığınız her şeyin kılavuzlarını kontrol etmek olurdu. – Rizier123
Veri ilişkisel bir veritabanında olsaydı, bu önemsiz olurdu. – symcbean