4

would any of you know a good way to put this into an associative array . I have tried json_decode but found it to not be much help.

This is the data i need to put into an associative array:

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

EDIT:

After I accepted the answer, I remembered why I thought that the json_decode wasn't working.

Instead of having an associative array like this:

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

I wanted one like this:

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

Unfortunately, I had forgotten this at the time.. but I have resolved my issue now anyway.

Thanks for all of your help!

FlyingFoX
  • 3,153
  • 2
  • 30
  • 45
vimist
  • 4,055
  • 1
  • 22
  • 33

3 Answers3

9

json_decode works for me on your data:

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));

Output:

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
                )

        )

)

Setting the second argument to true returns an associative array.

webbiedave
  • 47,388
  • 8
  • 87
  • 99
  • Thanks for your answer webbiedave, if you view my last comment on helle's comment you'll see what I did. +1 for the response I was looking for! – vimist Jun 18 '10 at 21:44
3

You have to make a new array

$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'];
}

you will get your associative array in $assoc_array and you can now directly access using indexes.

Mark Rotteveel
  • 90,369
  • 161
  • 124
  • 175
AndroidLearner
  • 1,360
  • 7
  • 24
  • 40
2

i asume your json comes via ajax.... (otherwise the code works with json_decode) so be sure the js json stringifys your object and

you'll need to stripslashes before json_decode ;-) in php

helle
  • 10,634
  • 9
  • 55
  • 82
  • It doesn't come via AJAX but for some reason, now when I use json_decode it works as i initally expected it to. Very strange because when I remove stripslashes, it also works... maybe I messed something up when I previously tried it. Many Thanks helle for nudging me back on track :o) – vimist Jun 18 '10 at 21:42