如何从这个数组中提取值?

时间:2010-03-08 14:27:00

标签: php multidimensional-array

Array ( [status] => success 
        [stories] => Array ( 
              [0] => Array ( [name] => John Doe 
                             [age] => 23)
              [1] => Array ( [name] => John Doe_1
                             [age] => 23)
              [2] => Array ( [name] => John Doe_2
                             [age] => 23)
       )
)    

当我尝试

foreach($stories as $story){ }

它返回错误。

更新:我正试图从Tweetmeme中删除最新的故事。由于json输出很长,我缩短了它。 :)

PHP代码:

$json=file_get_contents($url);
        $data=json_decode($json,true);
        print_r($data);

        foreach($stories as $story){
                $title = mysql_real_escape_string($story['title']);
                $url_temp = mysql_real_escape_string($story['url']);
                $tweets = intval($story['url_count']);


JSON Output:

Array ( [status] => success 
         [stories] => Array ( [0] => Array ( [title] => Steve Jobs has a Flash enabled iPad! [photo] [url] => http://thenextweb.com/shareables/2010/03/08/flash-ipad/ [media_type] => news [created_at] => 2010-03-08 09:11:40 [url_count] => 151 [tm_link] => http://tweetmeme.com/story/688449947 [comment_count] => 0 [excerpt] => Steve Jobs has a Flash enabled iPad! http://tnw.to/15mht [photo] [alias] => http://ow.ly/1pVNX0 [retweet] => RT @tweetmeme Steve Jobs has a Flash enabled iPad! [photo] http://ow.ly/1pVNX0 ) [1] => Array ( [title] => Scientists reaffirm theory that giant asteroid killed dinosaurs - CNN.com [url] => http://www.cnn.com/2010/TECH/science/03/08/dinosaurs.asteroid/ [media_type] => news [created_at] => 2010-03-08 08:12:37 [url_count] => 222 [tm_link] => http://tweetmeme.com/story/688253916 [comment_count] => 0 [excerpt] => (CNN) -- A team of scientists has agreed that a giant asteroid killed off dinosaurs and a majority of other species on Earth more than 65 million years ago. [thumbnail] => http://tweetmeme.s3.amazonaws.com/thumbs/688253916.jpg [alias] => http://ow.ly/1pVG7L [retweet] => RT @tweetmeme Scientists reaffirm theory that giant asteroid killed dinosaurs - CNN.com http://ow.ly/1pVG7L ) [2] => Array ( [title] => The New York Times is hiring 12 techies and a social media whiz [url] => http://venturebeat.com/2010/03/08/nyt-nytimes-hiring/ [media_type] => news [created_at] => 2010-03-08 10:30:57 [url_count] => 199 [tm_link] => http://tweetmeme.com/story/688719545 [comment_count] => 1 [excerpt] => While pundits climb over each other to predict the death of The New York Times Company, the NYT is looking to hire at least a dozen full-time software engineers and Web designers, plus one social media marketing manager. One opening carries the sexy title of Creative Technologist.The jobs, located in New York City, will focus on expanding content distribution and advertising opportunities in… [thumbnail] => http://tweetmeme.s3.amazonaws.com/thumbs/688719545.jpg [alias] => http://bit.ly/bFqAm7 [retweet] => RT @tweetmeme The New York Times is hiring 12 techies and a social media whiz http://bit.ly/bFqAm7 ) 

7 个答案:

答案 0 :(得分:3)

您只是忘记初始化变量$ data。请在for循环之前包含此行:

$stories = $data['stories'];

请记住,json_decode本身不会创建局部变量!

答案 1 :(得分:2)

你也可以这样做:

foreach($stories as $story) {
    if(is_array($story)) {
        foreach($story as $person) {
            print "{$person['name']}, {$person['age']}<br />";
        }
    }
}

如果包含子数组的键发生更改,或者您的数据将包含多个包含数据的子数组,那么这会给您一些灵活性。

答案 2 :(得分:1)

不确定它返回了什么错误,但你试过吗

foreach($stories['abc'] as $story){ 
}

代替?

答案 3 :(得分:1)

您是否需要引用您拥有该数组的变量?像foreach($json.stories as $story) ...

这样的东西

答案 4 :(得分:1)

foreach($ whatever_you_named_your_array ['stories']为$ story) {

}

答案 5 :(得分:0)

for ($i = 0; $i < count($array1['abc']); $i++)
{
    $current = $array1['abc'][$i];
}

应该这样做。

答案 6 :(得分:0)

foreach ($data AS $story){
    if(is_array($story)) {
        foreach($story as $person) {
            print_r($person);
        }
    }
}