获取未定义的属性:在数组上使用 foreach 时的 stdClass::$options
Posted
技术标签:
【中文标题】获取未定义的属性:在数组上使用 foreach 时的 stdClass::$options【英文标题】:Getting Undefined property: stdClass::$options when using a foreach on an array 【发布时间】:2018-07-04 04:18:50 【问题描述】:我有一个 php 对象 - $new_step。
在 Laravel 中,如果我对作为数组的子对象进行 dd - dd($new_step->data->options);
- 其中,我会得到一个有效的条目:
array:5 [▼
0 => #695 ▼
+"position": 1
+"value": "Dogs"
1 => #694 ▼
+"position": 2
+"value": "Cats"
2 => #693 ▼
+"position": 3
+"value": "Ferretts"
3 => #669 ▼
+"position": 4
+"value": "Gophers"
4 => #665 ▼
+"position": 5
+"value": "Possum"
]
但是,当我尝试对对象执行 foreach 时:
foreach ($new_step->data->options as $options)
$options->count = 0;
我得到这个错误:
ErrorException
Undefined property: stdClass::$options
为什么 foreach 会失败?
【问题讨论】:
你所拥有的不是数组吗? 是的,我澄清了数组是对象的子对象。 你必须循环$new_step->data->options[0]
?因为,它是数组中的对象。
【参考方案1】:
要做到这一点foreach
,您必须将 Object 的结果存储在变量中。
$temp = $new_step->data->options;
foreach ($temp as $options)
$options->count = 0;
最后,您将根据需要在列表中获得每个数组的count
变量?
在foreach
下方执行dd($temp)
以检查结果。
如果你再次没有得到正确的数组,可能你在$new_step->data->options
中有一些错误。
【讨论】:
【参考方案2】:原来在迭代中有一个数组是一个对象而不是数组。为了进行测试,我将for
循环移出循环链,并通过它测试了每次迭代,以查看第 5 次迭代是导致错误的原因。
【讨论】:
以上是关于获取未定义的属性:在数组上使用 foreach 时的 stdClass::$options的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 JSON 响应在 forEach 上崩溃? TypeError 未定义
在 vue.js 中查找数组长度时无法读取未定义的属性“长度”
使用 Jest 进行测试 - TypeError:无法读取未定义的属性“forEach”
无法读取未定义的 VueJS Firebase 的属性“forEach”