php - 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);
}
解决方案
由于$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 将首先读取属性的初始值并添加到该值。但由于该属性不存在,它会尝试从未定义的属性中读取,这将引发您看到的警告。改为=
定义并设置值。
推荐阅读
- html - 输入类型=“图像”的透明背景
- python - XCode/Swift 和 Python 文件 - 想要在 XCode 项目中嵌入 Python.py 文件
- node.js - 为什么我在 React 中得到最后一个函数调用结果
- python - 使用 pandas 解析 html 文件以提取特定表
- javascript - Rxjs:在条件下发出:数组属性与计时器
- cmake - 使用 otool -L 只显示库名称而不是它链接到的路径
- random - ARMv7 程序集,我该如何改进这个伪随机数生成器?
- powershell - PowerShell HTML 格式
- javascript - 防止在 hashchange 事件上跳转到锚点
- regex - 正则表达式用空格替换一个字符