php 将值对添加到现有数组对象

php add value pair to existing array object

我有一个数组,我们称它为 $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 ) 

然后我 foreach 循环遍历 $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) 

我试过了 $订单['total'] = $总计; 我得到 Indirect modification of overloaded 属性 $order has no effect.

执行此操作的正确方法是什么

for 循环方法似乎在做我想做的事,但我仍然得到间接错误。这里有一些可能与之相关的附加信息。

我的 $order 数组实际上是

$template->order 

它得到这样的对象数组

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

并且 $template 正在调用 class

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

也许 $template->order 以某种方式改变了语法?

只需使用好的 ol' for 循环:

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

注意 $order 中的每个元素都是一个对象。所以使用 -> 箭头符号来设置另一个 属性.

要做到这一点比较简单,你首先要做到这一点:

array_push($order,'5000')

您的 $order 数组包含对象,而不是数组。您正在尝试访问对象,但您使用的是数组表示法。变化:

$order['total'] = $total

 $order[0]->total = $total

您可以在用于计算新总数的现有 foreach 循环中完成所有操作,而不是使用 2 个数组然后合并它们。

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

    $order->total = $total;
}

请注意 &$order& 的使用允许您在 foreach 循环中访问该数组,这很重要,不是拼写错误

事实上,由于数组实际上包含对象,并且无论如何对象都作为引用传递,因此在这种情况下不需要 &,但如果它存在,它仍然有效。如果外部数组包含任何其他内容,则需要 &,因此这可能是一种很好的做法,并有助于自我记录代码,以提醒下一个开发人员正在做什么。

为什么不直接输入总数?

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