У меня есть файл JSON, который, по сути, структурирован следующим образом:
[{ "name": "James", "reviews": [ { "stars": 5, "body": "great!" }, { "stars": 1, "body": "bad!" } ] }, { "name": "David", "reviews": [ { "stars": 4, "body": "pretty good!" }, { "stars": 2, "body": "just ok..." } ] }]
Теперь, когда вы ставите новые данные обзора для Дэвида на PHP-скрипт, как мне настроить целевые «обзоры» Дэвида и добавить его?
Я уже правильно декодировал все и получил доступ как к декодированному файлу, так и к сообщению. Я просто не знаю, как настроить конкретные отзывы Дэвида в массиве JSON … Спасибо заранее!
ОБНОВЛЕНИЕ. Чтобы быть ясным, все уже декодировано, данные POST и файл JSON с сервера. Мне просто нужно знать, как конкретно настроить показания Дэвида и добавить его.
ОБНОВЛЕНИЕ 2 – Все, пожалуйста, также поймите, что это в том случае, если индекс неизвестен. Выполнение [1] было бы потрясающе, но когда кто-то подчиняется, они не будут знать, какой именно индекс. Цикл для рендеринга выполняется в AngularJS btw, поэтому не может назначать что-либо на стороне PHP для front-end.
PHP> = 5.5.0, необходимый для array_column
или ниже для альтернативного:
$array[array_search('David', array_column($array, 'name'))]['reviews'][] = array( 'stars'=>1,'body'=>'meh' );
Вместо array_column
вы можете использовать:
array_map(function($v) { return $v['name']; }, $array);
Вам нужно будет использовать for-loop / foreach для итерации через тестирование массива, где arr ['name'] === 'David', тогда вы можете получить доступ к arr ['reviews'].
foreach ($array as $person) { if ($person['name'] === 'David') { $person['reviews'][] = array("stars"=> 3,"body"=> "pretty cool!"); break; } }
Изменить: вы также можете создать общую функцию для этого
function findElem(arr,field,e) { foreach ($arr as $elem) { if ($elem[field] === e) { return $elem; } } return null; }
звонить:
$elem = findElem(myArray,'name','David'); if ($elem !== null) $elem[] = array("stars"=> 3,"body"=> "pretty cool!");
Похоже, больше работы, но если вы собираетесь делать это много раз, то это помогает.
Если вы хотите конкретно отзывы Дэвида и только отзывы Дэвида … предполагая, что массив $ содержит массив json_decoded:
$david_reviews = $array[1]["reviews"]; foreach($david_reviews as $review){ //Do code to retrieve indexes of array $stars = $review["stars"] //5 $body = $review["body"] //Great! }
Если вы хотите получить обзоры для каждого результата, тогда ответ пользователя2225171 – это то, что вы ищете.
json_decode($json, true)
вернет вам простой массив данных. Затем сохраните то, что вам нужно, и сохраните его с помощью json_encode()