获取未定义的属性:在数组上使用 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”

vue-carousel 无法读取未定义的属性“forEach”

VBA for Access,运行时错误 451:未定义属性让过程和属性获取过程未返回对象