#php #arrays #json
#php #массивы #json
Вопрос:
Всем привет, у меня есть файл json, подобный этому:
[
{
"search":1,
"hotelId":"YYB",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"YYB",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"YYW",
"combination":"0|1|0|0|0|0",
}
]
И я хочу добавить к этому json массив, преобразованный php в json.
Это мой массив php
array(1) {
[0]=>
array(24) {
["search"]=>
int(1)
["hotelId"]=>
string(3) "rrr"
["combination"]=>
string(11) "0|1|0|0|0|0"
}
[1]=>
array(24) {
["search"]=>
int(1)
["hotelId"]=>
string(3) "ttt"
["combination"]=>
string(11) "0|1|0|0|0|0"
}
Я пытаюсь добавить свой массив encode php в файл json.
Это то, что я пробовал:
$filename = 'json_upload/rooms.json';
$result = fread($file2, filesize($filename));
$arr = $result;
$arr_ret_room = $room_arr; //my php array
$res = array_merge_recursive((array)$arr, (array)$arr_ret_room);
fwrite($file2, json_encode($res));
fclose($file2);
Я также пробовал с array_merge
результат не меняется, когда я открываю файл json, скрипт добавляет мне новый корневой элемент, подобный этому:
[
{
"search":1,
"hotelId":"YYB",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"YYB",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"YYW",
"combination":"0|1|0|0|0|0",
}
]
[
{
"search":1,
"hotelId":"rrr",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"ttt",
"combination":"0|1|0|0|0|0",
}
]
Вместо этого:
[
{
"search":1,
"hotelId":"YYB",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"YYB",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"YYW",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"rrr",
"combination":"0|1|0|0|0|0",
},
{
"search":1,
"hotelId":"ttt",
"combination":"0|1|0|0|0|0",
}
]
Как я могу правильно объединить?
Спасибо
Ответ №1:
Лучше преобразовать строку JSON в массив, а затем объединить их вместо объединения этих строк JSON. Вам нужно изменить это:
$arr = $result;
$arr_ret_room = $room_arr; //my php array
$res = array_merge_recursive((array)$arr, (array)$arr_ret_room);
fwrite($file2, json_encode($res));
fclose($file2);
Для
$array1 = json_decode($result,true);
$array2 = $arr_ret_room;
$newArray = array_merge($array1,$array2);
$newJSON = json_encode($newArray);
fwrite($file2, $newJSON);
fclose($file2);
Комментарии:
1. верните мне ошибку, первый аргумент array_merge не является массивом, я изменил на этот $newArray = array_merge((array) $ array1, (array) $ array2); но исходная проблема все еще существует
2. Это означает, что переменная
$result
не является допустимой строкой JSON. Возможно, вам потребуется тщательно это проверить.3. если я ничего не добавляю, исходный json правильный
Ответ №2:
Если я вас правильно понял:
// assuming that $file contains contents of json file
$arr = array(...); //your php array
$jsonArr = json_decode($file);
$result = $arr $jsonArr;
затем вы можете сохранить свой $result
в свой файл.