在JSON_decode/多维数组之后访问JSON数组


Accessing JSON array after json_decode/multidimensional array

我从Twitter api中进行搜索,用file_get_contents获取数据,然后传递给json_decode,它给了我这个数组结构。

{"results":[
     {
     "from_user":"A-user-name",
     "from_user_id":457304735,
     "text":"Ich R U #BoysNoize #SuperRola",
          "entities":{
                 "urls":[{
                        "url":"http:'/'/t.co'/WZnUf68j",
                        "expanded_url":"http:'/'/instagr.am'/p'/Vz4Nnbnjd6'/",
                        }]
     }]
]

这对每一条推文都会重复,现在我可以使用foreach循环访问用户名和文本,并将每个结果实例分配给一个变量,然后从该变量中提取数据。

foreach($jsonArr['results'] as $item){    
// Takes the Array jsonArr and for every results heading creates an $item
    $user = mysql_real_escape_string($item['from_user']);
    $text = mysql_real_escape_string($item['text']);

这样可以保存正确的变量,但我似乎无法获得结果中实体数组中的数据。如果我打印出实体变量,比如用户名或文本,我会得到

ArrayArrayArrayArrayArrayArrayArrayArrayArrayArray

因此,它保存了返回的每个结果的数组,但我到底该如何访问它,我一直在摆弄我知道的其他一些访问数组数据的方法,但它们似乎都失败了。任何关于如何获得这些值或将它们与foreach集成的帮助都将非常感谢

假设您选择将JSON解码为多维数组,而不是对象:

foreach ($results as $tweet) {
    $user = $tweet["from-user"];
    $text = $tweet["text"];
    $entities = $tweet["enities"];
    $urls = $entities["urls"];
    foreach ($urls as $url) {
        echo $url["expanded_url"];
    }
}

等等

Array
(
    [results] => Array
        (
            [0] => stdClass Object
                (
                    [entities] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [urls] => Array
                                        (
                                            [0] => stdClass Object
                                                (
                                                    [expanded_url] => http://instagr.am/p/Vz4Nnbnjd6/
                                                    [url] => http://t.co/WZnUf68j
                                                )
                                        )
                                )
                        )
                    [from_user] => A-user-name
                    [from_user_id] => 457304735
                    [text] => Ich R U #BoysNoize #SuperRola
                )
        )
)

访问url:

$json_array['results'][0]->entities[0]->urls[0]->url;

有用代码:

<?php
$json ='{ "results" : [ { "entities" : 
[ { "urls" : [ { "expanded_url" : "http://instagr.am/p/Vz4Nnbnjd6/",
                    "url" : "http://t.co/WZnUf68j"
                  } ] } ],
        "from_user" : "A-user-name",
        "from_user_id" : 457304735,
        "text" : "Ich R U #BoysNoize #SuperRola"
      } ] }';
$json_array = (array)(json_decode($json));
echo '<pre>';
 //print_r($json_array);
 echo $json_array['results'][0]->entities[0]->urls[0]->url;

?>

只需执行print_r($jsonArr);,就可以使用解码后的json。