提问人:Code Lover 提问时间:12/29/2020 最后编辑:Code Lover 更新时间:12/29/2020 访问量:550
PHP foreach 循环未定义的属性/索引通知,同时将值设置为 stdclass 属性或数组变量
php foreach loop undefined property / index notice while setting value to stdclass property or array variable
问:
在foreach循环中,我正在尝试为源数组或对象添加一些附加属性。这给了我以下通知。
注意:未定义的属性:stdClass::$total
foreach ($this->products as $p_row) {
$this->data[ $p_row->group_id ][] = $p_row;
// getting index error here
$p_row->total += gs_get_product_qty_price($p_row->product, $p_row->qty);
}
但是,如果我添加注释,错误就会消失。@
foreach ($this->products as $p_row) {
$this->data[ $p_row->group_id ][] = $p_row;
// adding @ the error gone
@$p_row->total += gs_get_product_qty_price($p_row->product, $p_row->qty);
}
据我了解,在第一次迭代中,它没有定义;也许这就是显示错误的原因。
谁能向我解释一下以清除我的想法,是否可以使用以避免错误?
@
如果我尝试在
注意:未定义索引:总计
$this->data[$p_row->group_id]['total'] += gs_get_product_qty_price($p_row->product, $p_row->qty);
这是解决方案吗?
foreach ($this->products as $p_row) {
$p_row->total = 0;
$this->data[ $p_row->group_id ][] = $p_row;
$p_row->total += gs_get_product_qty_price($p_row->product, $p_row->qty);
}
答:
0赞
Ali Fakoor
12/29/2020
#1
我认为在foreach循环中你不能添加索引,你必须在循环之前创建索引。@ 只是忽略通知。 最后,在您的代码中,“=”是额外的。
评论
0赞
Code Lover
12/29/2020
是的,我明白这一点,但是如何在循环之前定义属性?因为它仅在循环中可用。我错误地删除了多余的内容。$p_row
=
0赞
Code Lover
12/29/2020
啊!以这种方式也是如此,这很有效。 这是正确的方法吗?foreach ($this->products as $p_row) { $p_row->total = 0; .. }
1赞
Ali Fakoor
12/29/2020
@CodeLover是的,我认为这是因为运算符“+=”必须有一个初始值来做功。
0赞
Code Lover
12/29/2020
明白了。谢谢:)明白了原因。
0赞
Hammad Ahmed khan
12/29/2020
#2
由于 $this->data[$p_row->group_id]['total'] 因此,它不是首先定义的 而您正在$this->data[$p_row->group_id]['total']+= 添加值 它抛出错误。您可以使用以下命令:
if(isset($this->data[$p_row->group_id]['total'])){
$this->data[$p_row->group_id]['total']+=gs_get_product_qty_price($p_row->product, $p_row->qty);
}else{
$this->data[$p_row->group_id]['total']= gs_get_product_qty_price($p_row->product, $p_row->qty);
}
评论
0赞
Code Lover
12/29/2020
谢谢。。请看一下我修改后的问题,这可行,但不确定是否是方法。Is it the solution?
1赞
Hammad Ahmed khan
12/29/2020
是的,它看起来不错
0赞
M. Eriksson
12/29/2020
#3
由于尚不存在,因此请定义它,而不是尝试添加它。只需更改为 .$p_row->total
+=
=
foreach ($this->products as $p_row) {
$this->data[ $p_row->group_id ][] = $p_row;
$p_row->total = gs_get_product_qty_price($p_row->product, $p_row->qty);
}
当你使用 时,PHP 将首先读取属性的初始值并添加到该值。但是,由于该属性不存在,它会尝试从未定义的属性中读取,这将引发您看到的警告。更改为定义和设置值。+=
=
评论
$p_row->total = 0;
@
$p_row
=
+=
+=
$p_row->total = gs_get_procuct_qty_price(....);
total
qty
price
qty
$p_row
price