Naletih na čudan bug u PHPu, uopće ne kužim uzrok…a nekako mi se čini da je sam PHP uzrok. Hmm…ambiciozno je okriviti PHP, ali fakat ne kužim.
Nastojao sam izabciti sve suvišno i ogoliti maksimalno code a da zadržim neočekivano ponašanje…pa code slijedi:
$send = [];
$r = [
'first'=>[
['ime'=>'ana','age'=>20],
['ime'=>'ivo','age'=>21]
],
'second'=>[
['ime'=>'ela','age'=>22],
['ime'=>'mia','age'=>23]
]
];
foreach ($r as $dataKey => $item) {
$data = [];
foreach ($item as $key => $row) {
$data[]=$row;
}
decho("data", $data); //decho je logiranje podataka
foreach ($data as &$row) {
$row["test"] = 100;
decho('row', $row);
}
decho("dataKey: ".$dataKey." ... AND data: ".toJS($data));
$send[$dataKey] = $data;
decho("send", $send);
}
return $send;
Kako radim logiranje, evo i loga:
data: [{"ime":"ana","age":20},{"ime":"ivo","age":21}]
row: {"ime":"ana","age":20,"test":100}
row: {"ime":"ivo","age":21,"test":100}
dataKey: first ... AND data: [{"ime":"ana","age":20,"test":100},{"ime":"ivo","age":21,"test":100}]
send: {"first":[{"ime":"ana","age":20,"test":100},{"ime":"ivo","age":21,"test":100}]}
data: [{"ime":"ela","age":22},{"ime":"mia","age":23}]
row: {"ime":"ela","age":22,"test":100}
row: {"ime":"mia","age":23,"test":100}
dataKey: second ... AND data: [{"ime":"ela","age":22,"test":100},{"ime":"mia","age":23,"test":100}]
send: {"first":[{"ime":"ana","age":20,"test":100},{"ime":"mia","age":23}],"second":[{"ime":"ela","age":22,"test":100},{"ime":"mia","age":23,"test":100}]}
Očekivao bi na kraju da je send:
{"first":[{"ime":"ana","age":20,"test":100},{"ime":"ivo","age":21, "test":100}],"second":[{"ime":"ela","age":22,"test":100},{"ime":"mia","age":23,"test":100}]}
A iz nekog razloga, kao što log prikazuje, zagubi se ivo, također na tom itemu gdje bi trebao biti ivo, tamo nije zakačen “test” attribut kao na svima ostalima.
Hmmm…
P.S. funkcija koja logira “decho”, nema nikakav utjecaj na algoritam. Ista greška se dešavala i bez toga logiranja.