Jagira
Jagira

Reputation: 1368

How can I extract values out of this 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)
       )
)    

When I try

foreach($stories as $story){ }

It returns an error.

Update: I am trying to pull out the most recent stories from Tweetmeme. Since the json output was long, I shortened it. :)

The PHP Code:

$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 ) 

Upvotes: 2

Views: 247

Answers (7)

You simply forgot to initialize the variable $data. Please include this line before the for-loop:

$stories = $data['stories'];

Keep in mind that json_decode itself does not create local variables!

Upvotes: 3

Hans
Hans

Reputation: 3523

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

}

Upvotes: 1

Raz
Raz

Reputation: 682

try

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

Upvotes: 0

TMN
TMN

Reputation: 3070

Do you need to reference the variable you have the array in? Something like foreach($json.stories as $story) ...?

Upvotes: 1

Tobias
Tobias

Reputation: 737

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

That should do it.

Upvotes: 0

Mark Biek
Mark Biek

Reputation: 150829

You could also do it like this:

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

That gives you a bit of flexibility if the key containing the sub-array changes or if your data is ever going to have multiple sub-arrays with data in them.

Upvotes: 2

vava
vava

Reputation: 25391

Not sure what error does it return, but have you tried

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

instead?

Upvotes: 1

Related Questions