Ваша проблема в том, что вы перезаписываете данные, не сохраняя их
$chartObject = new stdClass();
foreach($rows as $row){
$row->average = round($row->total_wait_time / $row->clients);
$chartObject->date = $row->date;
$chartObject->average = $row->average;
}
$chartArray[] = $chartObject;
Смотрите на каждой итерации foreach($rows as $row){
вы меняете данные в $chartObject
, но никогда не сохраняете в своем $chartArray
.
Сделайте это вместо
foreach($rows as $row){
$chartObject = new stdClass(); //new instance of stdClass, obj pass by refrence
$row->average = round($row->total_wait_time / $row->clients);
$chartObject->date = $row->date;
$chartObject->average = $row->average;
$chartArray[] = $chartObject;
}
Лично я бы даже не стал использовать объект:
foreach($rows as $row){
$average = round($row->total_wait_time / $row->clients);
$chartArray[] = ['date'=>$row->date,'average'=>$average];
}
Когда вы JSON-кодируете массив со строковыми ключами, он будетсделать его правильной структурой Javascript Object.Поэтому нет необходимости хранить все эти объекты в памяти, а код намного меньше, чище и проще для чтения.
Последнее, на что я намекал в коде, это то, что объекты передаются по ссылке.в PHP (сейчас), и если вы не создадите новый экземпляр объекта для каждой итерации, вы фактически обновите все ссылки на объект.Это можно проиллюстрировать следующим образом:
$obj = new stdClass;
$objects = [];
for($i=0;$i<3;++$i){
$obj->foo = $i;
$objects[] = $obj;
print_r($objects);
}
Вывод:
Array
(
[0] => stdClass Object
(
[foo] => 0
)
)
Array
(
[0] => stdClass Object
(
[foo] => 1
)
[1] => stdClass Object
(
[foo] => 1
)
)
Array
(
[0] => stdClass Object
(
[foo] => 2
)
[1] => stdClass Object
(
[foo] => 2
)
[2] => stdClass Object
(
[foo] => 2
)
)
Sanbox
Каждый массив представляет собой одну итерацию for
loop, это тот же массив, с каждой строкой, добавляемой после каждой итерации.
Как видите, каждая копия (на самом деле это не копия) обновляется по ссылке в массиве.В основном мы сохранили один и тот же объект (экземпляр будет называть его Bob
) 3 раза вместо 3 отдельных объектов (Bob
, Alice
, John
).
Если данные, которые вы сохранилибыл цвета рубашки людей, когда Bob
надевает красную рубашку, на нем красная рубашка, но Alice
и John
нет.
Из-за этого вам нужно создавать новый экземпляр объекта для каждой итерации и сохранять его.
Надеюсь, это поможет!