首页 > 解决方案 > php foreach循环未定义属性/索引通知,同时将值设置为stdclass属性或数组变量

问题描述

在 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);

}

标签: phpundefined-index

解决方案


由于$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 将首先读取属性的初始值并添加到该值。但由于该属性不存在,它会尝试从未定义的属性中读取,这将引发您看到的警告。改为=定义并设置值。


推荐阅读