【问题标题】:Getting: ' Trying to get property of non-object' when trying to access the value in an array of objects获取:尝试访问对象数组中的值时“尝试获取非对象的属性”
【发布时间】:2019-10-29 13:37:34
【问题描述】:

所以从一个 Get 请求中我得到了这个结构的响应:

{
  "chromeosdevices" : [
     {
         "somekey" : "somevalue",
         "annotatedUser" : "annotatedUserValue",
         "activeTimeRanges" : [
             {
                 "date" : "dateValue",
                 "activeTime" : "activeTimeValue"
             }
          ],
       "somekey" : "somevalue",
      },
   ]
}

如何同时访问 DateValue 和 ActiveTimeValue?

我已经用这个代码试过了:

$dec = json_decode($response);
$filteredResults= array();
if (! empty($dec->chromeosdevices)) {
    foreach ($dec->chromeosdevices as $chromeosdevice) {
        $user['annotatedUser'] = $chromeosdevice->annotatedUser;
        $user['activeTimeRanges_date'] = $chromeosdevice->activeTimeRanges->date;
        $user['activeTimeRanges_activeTime'] = $chromeosdevice->activeTimeRanges -> activeTime;
        $filteredResults[] = $user;
    }
}
echo '<pre>';print_r($filteredResults);echo '</pre>';

但是,我只取回了 annotatedUser,但没有取回日期和活动时间。这是为什么呢?

【问题讨论】:

  • activeTimeRanges 是一个对象数组。您不能直接访问该属性。正如@WKoppel 指出的那样,循环遍历它们或访问第一个元素。

标签: php arrays object foreach request


【解决方案1】:

因为它是数组中的另一个对象,所以使用$chromeosdevice-&gt;activeTimeRanges[0]-&gt;date;

【讨论】:

  • 但是,由于该数据位于数组中,因此强烈表明这些可能/可能存在多个。所以另一个循环可能是处理这个问题的更好方法
  • 确实如此,我找回了很多设备
  • 是的,我同意。我根据问题需要回答了
  • @user3660293 最好您接受 RiggsFolly 的回答,因为它一般都有效,并且会帮助其他提出您问题的人寻求解决方案。您可以对此答案投票以获得快速帮助。
【解决方案2】:

这是一个数组,所以也许另一个循环是处理这个问题的最安全方法

$dec = json_decode($response);
$filteredResults= array();
if (! empty($dec->chromeosdevices)) {
    foreach ($dec->chromeosdevices as $chromeosdevice) {
        $user = [];     // init and remove last loops info
        $user['annotatedUser'] = $chromeosdevice->annotatedUser;
        foreach ($chromeosdevice->activeTimeRanges as $tr) {
            $user['activeTimeRanges_date'][]       = $tr->date;
            $user['activeTimeRanges_activeTime'][] = $tr->activeTime;
        }
        $filteredResults[] = $user;
    }
}
echo '<pre>';print_r($filteredResults);echo '</pre>';

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2016-05-02
    相关资源
    最近更新 更多