php добавляет пару значений к существующему объекту массива

У меня есть массив, давайте назовем его $ order, который выглядит следующим образом

Array (
[0] => stdClass Object (
[model] => Test Model Number 900
[quantity] => 100
[retail_per_unit] => 50.0000)

[1] => stdClass Object (
[model] => model 2
[quantity] => 5
[retail_per_unit] => 100.0000 )

затем я зацикливаюсь на $ order для выполнения некоторых вычислений и получения другого массива, назовем его $ total

так что мой массив $ total выглядит так

 Array (
[0] => 5000
[1] => 500
)

Теперь я хочу вставить пару ключ-значение обратно в массив, чтобы он стал

Array (
[0] => stdClass Object (
[model] => Test Model Number 900
[quantity] => 100
[retail_per_unit] => 50.0000
[total] => 5000)

[1] => stdClass Object (
[model] => model 2
[quantity] => 5
[retail_per_unit] => 100.0000
[total] => 500)

Я старался
$ order [‘total’] = $ total;
и я получаю Косвенное изменение перегруженного свойства $ order не имеет никакого эффекта.

как правильно делать это

Метод цикла for, кажется, делает то, что я хочу, но я все еще получаю косвенную ошибку. Вот некоторая дополнительная информация, которая может быть связана с этим.

мой массив $ order на самом деле

$template->order

он получает массив объектов, как это

$template->order = $someClass->someQuery($id);

и $ template вызывает класс

$template = new Template(dirname(__DIR__).'/templates/templatepage.php');

может быть, $ template-> order как-то меняет синтаксис?

0

Решение

Почему бы просто не подвести итоги на ходу?

foreach ($order as $x) {
$x->total = $x->quantity * $x->retail_per_unit;
}
3

Другие решения

Просто используй добро for цикл:

$count = count($order);
for($i = 0; $i < $count; $i++) {
$order[$i]->total = $total[$i];
}

Обратите внимание на каждый элемент внутри $order это объект. Так что используйте -> обозначение стрелки, чтобы установить другое свойство.

2

Вы можете сделать все это в существующем цикле foreach, который вы используете для вычисления нового итогового значения, а не использования двух массивов и последующего их слияния.

foreach ( $orders as &$order) {
// do calulations to get $total

$order->total = $total;
}

Обратите внимание на использование & в &$order это позволяет вам получить доступ к этому массиву в то время как все еще в цикле foreach и важно, не опечатка

Фактически, так как массив на самом деле содержит объекты, и объекты все равно передаются как ссылки, & не требуется в этом случае, но все еще работает, если он там есть. Если во внешнем массиве хранится что-то еще, то & будет необходимо, так что это, вероятно, хорошая практика и помогает с самодокументированным кодом оставить его, чтобы напомнить следующему разработчику, что делается.

2

Ваш $order массив содержит объекты, а не массивы. Вы пытаетесь получить доступ к объектам, но вы используете нотацию массива. Изменить:

$order['total'] = $total

к

 $order[0]->total = $total
1

Чтобы сделать это относительно просто, вы должны сначала сделать это:

array_push($order,'5000')
-1
По вопросам рекламы [email protected]