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