2013-06-25 3 views
0

Ниже приведена свалка, которую я получил от монго. Мне нужно получить имя исполнителя.Невозможно получить данные из свалки Mongo

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

[s20] => Array 
    (
     [opening] => Array 
      (
       [artist] => Array 
        (
         [name] => Jay Z 
        ) 

       [music] => Array 
        (
         [name] => 99 problems 
        ) 

      ) 
) 

Итак, я попробовал:

foreach($mongo_dump as $key=>$value){ 
    echo "<pre>KEY: " . print_r($key["s20"]["opening"]["artist"]["name"]) . "</pre>"; // line # 16 
    echo "<pre>VALUE: " . print_r($value) . "</pre>"; 
    echo "\n\n"; 
} 

Однако я не получил имя исполнителя. Я получил следующее предупреждение PHP:

PHP Warning: Illegal string offset 's20' in /var/www/Code/analytics/fetch_top_5_opening_artists.php on line 16 
+1

'$ key' не является массивом для каждого индекса в отвал – Don

ответ

2

Как упоминает Блейн, ключ $ не является массивом. Неправильный путь, по которому вы проходите свалку. $ key становится строкой в ​​контексте цикла foreach. Попробуйте сделать что-то вроде этого:

if ($key == "s20") { 
    echo "<pre>KEY: " . print_r($value["opening"]["artist"]["name"]) . "</pre>"; 
} 
0

Значение сам массив(), так что ваш forloop не будет работать, если вы не setupup вложенными. Вот пример neted for loop.

foreach($mongo_dump as $key) 
{ 

    { 
    foreach($key as $subkey) 
    { 

    echo $subkey 
    echo "\n\n"; 
} 

}