PHP - 从JSON数组中获取变量

时间:2018-05-19 13:43:15

标签: php json

我正在使用PHP库(亚伯拉罕的OAUTH)作为连接到我的Twitter帐户的应用程序,我正在从Twitter的API中下载我自己的推文,试图在我的页面上美化显示它们。

我用foreach循环遍历它们

<?php

foreach ($statuses as $key => $status) {
    echo '
    <blockquote class="twitter-tweet" data-lang="en"><p lang="und" dir="ltr">' . $status->text . '</p>
    ' . $status->name . ' (@' . $status->screen_name . ') <a href="https://twitter.com/' . $status->screen_name . '/status/' . $status->id_str . '">' . $status->created_at . '</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><br>
    ';
}

?>

这些来自var_dump,是我正在使用的

array(1) { [0]=> object(stdClass)#3 (25) { ["created_at"]=> string(30) "Fri May 18 10:41:07 +0000 2018" ["id"]=> int(997426852204634112) ["id_str"]=> string(18) "997426852204634112" ["text"]=> string(27) "lol" ["name"]=> string(6) "Example" ["screen_name"]=> string(10) "Example_Name"

但是我得到了回复:

  

注意:未定义的属性:stdClass :: $ name

     

注意:未定义的属性:stdClass :: $ screen_name

这是为什么?我在var_dump中看到name和screen_name,为什么它无法接收它们?

1 个答案:

答案 0 :(得分:0)

这只是一个通知,标志着该结构没有财产。 你有几个解决方案:

  1. 关闭切换通知错误(不推荐)Official php docs
  2. 检查属性是否存在,仅在确实存在时才回显它。 E.g:

    isset($status->screen_name) ? $status->screen_name : '';
    
  3. 您可以在输出之前规范化数据:如果属性不存在,只需使用默认值初始化该属性:

     $status->screen_name = isset($status->screen_name) ? $status->screen_name : '';
    
  4. <强>更新 在您的情况下,您尝试访问错误的节点: "screen_name"是stdClass对象user的节点,它是状态对象的子节点。因此,您需要致电$status->user->screen_name