Php массив json_encode и массив объектов - PullRequest
0 голосов
/ 16 июня 2020

Мне нужно создать json в этом формате:

{
  "reservs": [
    {
      "ResId": "58",
      "time": "2020-05-15 19:41:50",
      "boxEntering": null,
      "boxClosing": null,
      "active": "1",
      "UserId": "29",
      "BoxId": "4",
      "boxPlace": null,
      "box": {
        "id": "4",
        "Nom": "Hortillonages",
        "Lat": "49.8953",
        "Lng": "2.31034",
        "place": "0",
        "placeMax": "9"
      }
    }
  ]
}

в записях, $ header, который проверяет токен пользователя (не используется для моей проблемы) $ table таблица, возвращенная из PDO: : FETCHASSO C from sql SELECT запрос Мой php код:

function generateJson($table, headerChecker $header){
    $final = array();
    foreach ($table as $item) {
        $box = array(
            "id" => $item["id"],
            "Nom" => $item["Nom"],
            "Lat" => $item["Lat"],
            "Lng" => $item["Lng"],
            "place" => $item["place"],
            "placeMax" => $item["placeMax"]
        );
        $reserv = array(
            "ResId" => $item["ResId"],
            "time" => $item["time"],
            "boxEntering" => $item["boxEntering"],
            "boxClosing" => $item["boxClosing"],
            "active" => $item["active"],
            "UserId" => $item["UserId"],
            "BoxId" => $item["BoxId"],
            "boxPlace" => $item["boxPlace"],
        );
        $reserv["box"] = $box;
        array_merge($final,$reserv);
    }
    $arr = array("reservs" => $table);
    $header->tokenJson($arr);
    echo json_encode($arr);
}

У меня такой результат

{"reservs": [
        {
            "ResId": "58",
            "time": "2020-05-15 19:41:50",
            "boxEntering": null,
            "boxClosing": null,
            "active": "1",
            "UserId": "29",
            "BoxId": "4",
            "boxPlace": null,
            "id": "4",
            "Nom": "Hortillonages",
            "Lat": "49.8953",
            "Lng": "2.31034",
            "place": "0",
            "placeMax": "9",
            "QRID": "",
            "boxToken": ""
        }]
}

Я думаю, что ошибка формата Json находится в Функция array_merge. Какую функцию добавления массива я могу использовать, чтобы не удалять объект Box

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Ваша проблема в том, что вы не назначаете возврат array_merge и используете неправильную переменную $table. Просто динамически добавить к $final:

foreach ($table as $item) {
    // this all appears good
    //
    $reserv["box"] = $box;
    $final[] = $reserv;             // append to $final
}
$arr = array("reservs" => $final);  // use $final
$header->tokenJson($arr);
echo json_encode($arr);

Слить новый $reserv с $final и назначить его $final, затем использовать $final.

0 голосов
/ 16 июня 2020

Попробуйте это

function generateJson($table, headerChecker $header){
    $final = array();
    foreach ($table as $item) {
        $box = array(
            "id" => $item["id"],
            "Nom" => $item["Nom"],
            "Lat" => $item["Lat"],
            "Lng" => $item["Lng"],
            "place" => $item["place"],
            "placeMax" => $item["placeMax"]
        );
        $reserv = array(
            "ResId" => $item["ResId"],
            "time" => $item["time"],
            "boxEntering" => $item["boxEntering"],
            "boxClosing" => $item["boxClosing"],
            "active" => $item["active"],
            "UserId" => $item["UserId"],
            "BoxId" => $item["BoxId"],
            "boxPlace" => $item["boxPlace"],
        );
        $reserv["box"] = $box;
        $final[] = $reserv;
    }
    $arr = array("reservs" => $final);
    $header->tokenJson($arr);
    echo json_encode($arr);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...