2016-04-19 8 views
0

Код:MongoDB и Twitter массив

$m = new MongoClient(); 
$db = $m->selectDB('twitter'); 
$collection = new MongoCollection($db, 'status'); 
$cursor = $collection->find(); 
foreach ($cursor as $document) { 
    echo $document['statuses'][0]['text']; 
} 

Массив:

Array 
(
    [_id] => MongoId Object 
    (
     [$id] => 123 
    ) 

    [statuses] => Array 
    (
     [0] => Array 
      (
      [text] => Tweet no 1 
      ) 
     [1] => Array 
      (
      [text] => Tweet no 2 
      ) 
     [1] => Array 
      (
      [text] => Tweet no 3 
      ) 
    ) 
) 

Выход: Tweet нет 1.

Как не я получаю 'текст' массив целого? Он должен вернуть «Tweet no 1, Tweet no 2, Tweet no 3» вместо этого.

Я пробовал echo $document['statuses']['text'], но не работает.

ответ

1

Прямо сейчас ваш запрос возвращает коллекцию, поэтому вы выполняете итерацию правильно. Вопрос в том, что это коллекция только один документ, и вы печатаете только первый статус в этом документе:

foreach ($cursor as $document) { 
    // here $document = {_id: 123, statuses:[{text:'Tweet no 1'},{text:'Tweet no 2'},{text:'Tweet no 3'}]} 
    // here you are only printing the first status  
    echo $document['statuses'][0]['text']; 
} 

Ваш документ имеет множество статусов, так что вы хотите, чтобы перебрать этот массив:

foreach ($cursor as $document) { 
    foreach($document["status"] as $status) { 
     echo $status['text']; 
    } 
} 
Смежные вопросы