2010-06-18 3 views
2

может кто-нибудь из вас знает хороший способ поместить его в ассоциативный массив. Я пробовал json_decode, но нашел, что это не поможет.JSON to PHP Ассоциативный массив

Это данные мне нужно поместить в ассоциативный массив:

{ 
     "data": [ 
      { 
      "name": "Joe Bloggs", 
      "id": "203403465" 
      }, 
      { 
      "name": "Fred Bloggs", 
      "id": "254706567" 
      }, 
      { 
      "name": "Barny Rubble", 
      "id": "453363843" 
      }, 
      { 
      "name": "Homer Simpson", 
      "id": "263508546" 
      } 
     ] 
    } 

EDIT:

После того как я принял ответ, я вспомнил, почему я думал, что json_decode WASN Не работаем.

Вместо того, чтобы ассоциативный массив вроде этого:

[0] => Array 
(
    [name] => Joe Bloggs 
    [id] => 203403465 
) 

Я хотел один так:

Array 
(
    [Joe Bloggs] => 45203340465 
    [Fred Bloggs] => 65034033446 
) 

К сожалению, я забыл об этом в то время .. но я решил мою проблему теперь все равно.

Спасибо за вашу помощь!

+0

на всякий случай ... не разрешено хранить данные пользователя facebook, кроме uid более 24 часов ... – helle

+1

@helle: это уже не так – Yuliy

ответ

2

я предполагаю ваш JSON приходит через AJAX .... (в противном случае код работает с json_decode) поэтому убедитесь, что JS JSON stringifys ваш объект и

вам нужно stripslashes перед тем json_decode ;-) в PHP

+0

Ах, спасибо, плохо дайте ему пойти: o) – vimist

+0

Он не приходит через AJAX, но по какой-то причине теперь, когда я использую json_decode, он работает так, как я его ожидал. Очень странно, потому что, когда я удаляю stripslashes, он также работает ... может быть, я что-то испортил, когда я это пробовал раньше. Большое спасибо helle за то, что я подтолкнул меня назад: o) – vimist

+0

hmm ... хорошо, если он работает прямо сейчас - cool :-) – helle

8

json_decode работает для меня на ваших данных:

print_r(json_decode('{ 
     "data": [ 
      { 
      "name": "Joe Bloggs", 
      "id": "203403465" 
      }, 
      { 
      "name": "Fred Bloggs", 
      "id": "254706567" 
      }, 
      { 
      "name": "Barny Rubble", 
      "id": "453363843" 
      }, 
      { 
      "name": "Homer Simpson", 
      "id": "263508546" 
      } 
     ] 
    } 
', true)); 

Выход:

Array 
(
    [data] => Array 
     (
      [0] => Array 
       (
        [name] => Joe Bloggs 
        [id] => 203403465 
       ) 

      [1] => Array 
       (
        [name] => Fred Bloggs 
        [id] => 254706567 
       ) 

      [2] => Array 
       (
        [name] => Barny Rubble 
        [id] => 453363843 
       ) 

      [3] => Array 
       (
        [name] => Homer Simpson 
        [id] => 263508546 
       ) 

     ) 

) 

Установка второго аргумента в true возвращает ассоциативный массив.

+0

Спасибо за ваш ответ webbiedave, если вы посмотрите мой последний комментарий на комментарий helle, вы увидите, что я сделал. +1 за ответ, который я искал! – vimist

0

Вы должны сделать новый массив

$json_array = json_decode($_POST['json'], true); 
$assoc_array = array(); 

for($i = 0; $i < sizeof($json_array); $i++) 
{ 
    $key = $json_array[$i]['name']; 
    $assoc_array[$key] = $json_array[$i]['value']; 
} 

вы получите ассоциативный массив в $ assoc_array и теперь вы можете получить прямой доступ с помощью индексов.

Смежные вопросы