Как я могу извлечь значения из этого массива? - PullRequest
2 голосов
/ 08 марта 2010
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 ]

3 голосов
/ 08 марта 2010

Вы просто забыли инициализировать переменную $ data. Пожалуйста, включите эту строку перед циклом for:

$stories = $data['stories'];

Имейте в виду, что сам json_decode не создает локальные переменные!

2 голосов
/ 08 марта 2010

Вы также можете сделать это так:

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

Это дает вам некоторую гибкость, если ключ, содержащий подмассив, изменится или если ваши данные когда-либо будут иметь несколько подмассивов с данными в них.

1 голос
/ 08 марта 2010

foreach. {

}

1 голос
/ 08 марта 2010

Нужно ли ссылаться на переменную, в которой находится массив? Что-то вроде foreach($json.stories as $story) ...?

1 голос
/ 08 марта 2010

Не уверен, какую ошибку он возвращает, но вы пробовали

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

вместо

0 голосов
/ 08 марта 2010

1001 * попробовать *

foreach ($data AS $story){
    if(is_array($story)) {
        foreach($story as $person) {
            print_r($person);
        }
    }
}
0 голосов
/ 08 марта 2010
for ($i = 0; $i < count($array1['abc']); $i++)
{
    $current = $array1['abc'][$i];
}

Это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...