Как преобразовать строку JSON в массив (PHP)?

используя приведенный ниже код для декодирования json

$categories = json_decode($data); $categories = $categories->data; 

где я получаю это

 {"categories":[{"id":1,"name":"Utilities","apps":897,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/uti.jpg"},{"id":2,"name":"Productivity","apps":477,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/pro.jpg"},{"id":3,"name":"Music","apps":466,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/mus.jpg"},{"id":4,"name":"Travel","apps":289,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/tra.jpg"},{"id":5,"name":"Navigation","apps":297,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/nav.jpg"},{"id":6,"name":"Books","apps":271,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/boo.jpg"},{"id":7,"name":"Healthcare & Fitness","apps":250,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/hea.jpg"},{"id":8,"name":"Games","apps":5116,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/gam.jpg"},{"id":9,"name":"Social Networking","apps":272,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/soc.jpg"},{"id":10,"name":"Lifestyle","apps":434,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/lif.jpg"},{"id":11,"name":"Finance","apps":200,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/fin.jpg"},{"id":12,"name":"News","apps":128,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/new.jpg"},{"id":13,"name":"Photography","apps":481,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/pho.jpg"},{"id":14,"name":"Entertainment","apps":1251,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/ent.jpg"},{"id":15,"name":"Business","apps":221,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/bus.jpg"},{"id":16,"name":"Sports","apps":199,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/spo.jpg"},{"id":17,"name":"Education","apps":433,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/edu.jpg"},{"id":18,"name":"Medical","apps":262,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/med.jpg"},{"id":19,"name":"Weather","apps":64,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/wea.jpg"},{"id":20,"name":"Reference","apps":419,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/ref.jpg"}]} 

и я хотел бы преобразовать в массив, подобный этому

 Array[0] { id => 1 name => Utilities apps => 897 iconurl => http:\/\/static.apptrackr.org\/caticons\/uti.jpg } 

и так далее

Это похоже на строку JSON . Вы можете использовать json_decode () для преобразования его в переменную PHP, например

 $obj = json_decode($json); print_r($obj->categories); // array of StdClass objects 

Вы можете регулярно просматривать и сортировать массив категорий

 echo $obj->categories[0]->name; // Utilities echo $obj->categories[1]->name; // Productivity echo $obj->categories[2]->name; // Music 

Чтобы преобразовать объекты StdClass в массивы, вы можете сделать

 $categories = array(); foreach (json_decode($json)->categories as $category) { $categories[] = (array) $category; } print_r($categories); 

Вы также можете сделать это с помощью лямбда-функции и array_map :

 // Before PHP5.3 $categories = array_map( create_function('$el', 'return (array) $el;'), json_decode($json)->categories); // After PHP5.3 $categories = array_map( function($el) { return (array) $el; }, json_decode($json)->categories); 

Erm, вы можете просто установить второй параметр для преобразования JSON в массив, а не в объект:

 $categories = json_decode($data, true); 

взгляните на get_object_vars http://php.net/manual/en/function.get-object-vars.php

@Gordon кажется правильным – это похоже на JSON. Предполагая, однако, что вы имеете дело с «фактическим» объектом PHP, тогда он будет итерируемым; просто пропустите его с помощью foreach и нажмите каждую пару ключ / значение в свой целевой массив.