Задача: Есть JSON файл такого типа:
{
"Postcode": 246050,
"Region": "ГОМЕЛЬСКАЯ",
"Area": "ГОМЕЛЬСКИЙ",
"TownType": "Г",
"TownName": "ГОМЕЛЬ",
"StreetType": "УЛ",
"StreetName": "БИЛЕЦКОГО",
"Buildings": "4,5"
},
{
"Postcode": 246050,
"Region": "ГОМЕЛЬСКАЯ",
"Area": "ГОМЕЛЬСКИЙ",
"TownType": "Г",
"TownName": "ГОМЕЛЬ",
"StreetType": "УЛ",
"StreetName": "ВОЛОТОВСКАЯ",
"Buildings": "2,2Г"
},
Его надо переделать в другой JSON так, чтобы параметр "Buildings" был по 1 значению. Т.е. вот так:
{
"Postcode": 246050,
"Region": "ГОМЕЛЬСКАЯ",
"Area": "ГОМЕЛЬСКИЙ",
"TownType": "Г",
"TownName": "ГОМЕЛЬ",
"StreetType": "УЛ",
"StreetName": "БИЛЕЦКОГО",
"Buildings": "4"
},
{
"Postcode": 246050,
"Region": "ГОМЕЛЬСКАЯ",
"Area": "ГОМЕЛЬСКИЙ",
"TownType": "Г",
"TownName": "ГОМЕЛЬ",
"StreetType": "УЛ",
"StreetName": "БИЛЕЦКОГО",
"Buildings": "5"
},
{
"Postcode": 246050,
"Region": "ГОМЕЛЬСКАЯ",
"Area": "ГОМЕЛЬСКИЙ",
"TownType": "Г",
"TownName": "ГОМЕЛЬ",
"StreetType": "УЛ",
"StreetName": "ВОЛОТОВСКАЯ",
"Buildings": "2"
},
{
"Postcode": 246050,
"Region": "ГОМЕЛЬСКАЯ",
"Area": "ГОМЕЛЬСКИЙ",
"TownType": "Г",
"TownName": "ГОМЕЛЬ",
"StreetType": "УЛ",
"StreetName": "ВОЛОТОВСКАЯ",
"Buildings": "2Г"
},
Написал вот такой код:
$d1 = file_get_contents('1.json');
$js1 = json_decode($d1);
$js2= array();
$I = count($js1);
$s=0;
for ($i=0; $i<$I; $i++){
$par = explode(",", $js1[$i]->Buildings);
$J = count($par);
for ($j=0; $j<$J; $j++){
array_push($js2, $js1[$i]);
$js2[$s]->Buildings=$par[$j];
$s++;
}
}
Но он почему разбивает json как надо, но в параметр Buildings записывает только последнее значение из строки. Хотя если в цикле после $s++ задать
echo $par[$j];
echo "<br/>";
то будет показывать все верно, как должно идти. Но в новый массив не хочет задаваться разные параметры.
Всё очень просто. это ООП. Вы присваиваете ячейке массива не примитивный тип, а объект. В Вашем случае выходит, что вы к разным ячейкам массива присвоили один и тот же объект, которому вы меняете значение Building, соответственно оно меняется в обеих ячейках. Просто решение для Вас
array_push($js2, clone($js1[$i]));
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть выпадающий список находящийся в ячейке таблицы с ФИО сотрудников, как сделать чтобы в определенные ячейки вывелись все остальные поля...
При попытке в посреднике проверить url и перенаправить пользователя на метод контроллера, Laravel пишет, что метод в контроллере не определен...