views:

115

answers:

7
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 ) 
A: 
for ($i = 0; $i < count($array1['abc']); $i++)
{
    $current = $array1['abc'][$i];
}

That should do it.

Tobias
+1  A: 

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

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

instead?

vava
+2  A: 

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.

Mark Biek
I made a mistake in the question. It is still not working.
Jagira
The error is "Invalid argument supplied for foreach() in..."
Jagira
That sounds like whatever variable you're passing to the foreach loop isn't really an array. Posting more code might be helpful. Can you post the code that generates the array?
Mark Biek
The code is bulky, so i shortened it. Anyway I will try to post the code.
Jagira
I am pulling the list of Recent Stories from Tweetmeme.
Jagira
I think the problem is that your foreach() loop uses the variable $stories but you seem to be decoding the JSON data into the variable $data.
Mark Biek
+1  A: 

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

TMN
A: 

try

foreach ($data AS $story){
    if(is_array($story)) {
        foreach($story as $person) {
            print_r($person);
        }
    }
}
Raz
+1  A: 

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

}

Hans
+2  A: 

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!

Johann Philipp Strathausen