объединить файл json и массив php

#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 в свой файл.