2013-04-22 3 views
0

У меня возникают следующие JSON:Получить конкретное значение из массива PHP

{ 
    "data": [ 
    { 
     "id": "116376655202954/insights/page_impressions_organic/day", 
     "name": "page_impressions_organic", 
     "period": "day", 
     "values": [ 
     { 
      "value": 13059, 
      "end_time": "2013-02-22T08:00:00+0000" 
     }, 
     { 
      "value": 15223, 
      "end_time": "2013-02-23T08:00:00+0000" 
     }, 

И я с помощью PHP, чтобы получить значения value и end_time следующий Еогеасп:

foreach ($page_impressions_organic['data'] as $page_impression_organic) { 
    foreach($page_impression_organic['values'] as $key => $page_impression_organic_values) { 
     $end_time = strval($page_impression_organic_values['end_time']); 
     $ds = substr($end_time, 0, -14); 
     $value = intval($page_impression_organic_values['value']); 
     echo '[\'' . $ds . '\', ' . $value . ']'; 
}} 

Все это как и следовало бы, моя проблема в том, что сейчас у меня есть другой json:

{ 
    "data": [ 
    { 
     "id": "116376655202954/insights/page_storytellers_by_story_type/day", 
     "name": "page_storytellers_by_story_type", 
     "period": "day", 
     "values": [ 
     { 
      "value": { 
      "fan": 2043, 
      "page post": 293, 
      "user post": 5 
      }, 
      "end_time": "2013-02-22T08:00:00+0000" 
     }, 
     { 
      "value": { 
      "fan": 1085, 
      "page post": 398, 
      "user post": 5 
      }, 
      "end_time": "2013-02-23T08:00:00+0000" 
     }, 

, и я не могу получить те же результаты, потому что value - это массив, и мне особенно нужны только значения page post. Мне нужно сохранить форму, которую мое эхо имеет для дальнейших областей. Я сделал еще один Еогеасп для так:

foreach ($page_talking_abouts['data'] as $page_talking_about) { 
    foreach($page_talking_about['values'] as $key => $page_talking_about_values) { 
     foreach($page_talking_about_values['value'] as $page_talking_about_value) { 
      $end_time = strval($page_talking_about_values['end_time']); 
      $ds = substr($end_time, 0, -14); 
      $value = intval($page_talking_about_value['page post']); 
      echo '[\'' . $ds . '\', ' . $value . ']'; 
}}} 

$value но это 0 каждый раз ... Что я должен делать?

+0

Почему бы просто не расшифровать свою строку json и не поработать над ней? – Rikesh

+0

'end_time' не находится в' value'. Избавьтесь от третьего цикла foreach. – nickb

+0

PHP json_decode ($ jsonData, true); вернет многомерный массив – fullybaked

ответ

2

Его мертвое просто. См переписанного кода:

foreach ($page_talking_abouts['data'] as $page_talking_about) { 
    foreach($page_talking_about['values'] as $key => $page_talking_about_values) { 
     $end_time = strval($page_talking_about_values['end_time']); 
     $ds = substr($end_time, 0, -14); 
     $value = intval($page_talking_about_values['value']['page post']); 
     echo '[\'' . $ds . '\', ' . $value . ']'; 
    } 
} 

Ваш действительно не нужно перебирать массив внутренних значений, если требуется только известный индекс. То, что произошло в вашем решении в том, что для каждого значения в массиве вложенного значения вы пытались получить индекс page post, но значения вложенного массива не массивы индекс page post вернулся через null который translatesd к 0 если подается в intval.

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

+0

Спасибо, он работает как шарм. Имена переменных теперь предназначены для тестирования, я буду использовать Ajax, чтобы сделать запрос GET в php-файл в любое время, когда потребуется такая операция. –

0

Вы не можете пройти через него прямо. Декодируйте строку с помощью json_decode, а затем выполните цикл foreach, а затем снова json_encode.

1

Я думаю, что вам не нужен третий цикл for, потому что массив value существует только один раз за end-time.

Попробуйте изменить свой код так:

foreach ($page_talking_abouts['data'] as $page_talking_about) { 
    foreach($page_talking_about['values'] as $key => $page_talking_about_values) { 

     // note: removed third for-loop 

     $end_time = strval($page_talking_about_values['end_time']); 
     $ds = substr($end_time, 0, -14); 

     // note: changed this line to directly read out the page posts 
     $value = intval($page_talking_about_values['value']['page post']); 

     echo '[\'' . $ds . '\', ' . $value . ']'; 
}} 
Смежные вопросы