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

时间:2016-07-13 22:34:58

标签: php arrays keyvaluepair

我有一个数组,让我们称它为$ 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->命令以某种方式更改语法?

5 个答案:

答案 0 :(得分:3)

为什么不直接把总数放进去?

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

答案 1 :(得分:2)

只需使用好的' for循环:

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

请注意$order内的每个元素都是一个对象。因此,使用->箭头符号设置另一个属性。

答案 2 :(得分:2)

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

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

    $order->total = $total;
}

请注意&&$order的使用,允许您在仍处于foreach循环中时访问该数组,并且非常重要,不是拼写错误

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

答案 3 :(得分:1)

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

$order['total'] = $total

 $order[0]->total = $total

答案 4 :(得分:-1)

要做到这一点相对简单,首先必须这样做:

array_push($order,'5000')