php JSON. где-то глупая ошибка

202
23 августа 2018, 16:40

Задача: Есть 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/>";

то будет показывать все верно, как должно идти. Но в новый массив не хочет задаваться разные параметры.

Answer 1

Всё очень просто. это ООП. Вы присваиваете ячейке массива не примитивный тип, а объект. В Вашем случае выходит, что вы к разным ячейкам массива присвоили один и тот же объект, которому вы меняете значение Building, соответственно оно меняется в обеих ячейках. Просто решение для Вас

 array_push($js2, clone($js1[$i]));
READ ALSO
Вывод данных при выборе значения из выпадающего списка

Вывод данных при выборе значения из выпадающего списка

Есть выпадающий список находящийся в ячейке таблицы с ФИО сотрудников, как сделать чтобы в определенные ячейки вывелись все остальные поля...

202
Laravel перенаправление на контроллер в посреднике

Laravel перенаправление на контроллер в посреднике

При попытке в посреднике проверить url и перенаправить пользователя на метод контроллера, Laravel пишет, что метод в контроллере не определен...

202
index of при переходе по домену сайта

index of при переходе по домену сайта

Привет все доброжелателям и не очень!

159