Создание JSON из нескольких массивов PHP

#php #json

#php #json

Вопрос:

Я создал три массива в файле PHP, все из которых получили свои элементы из базы данных MYSQL. Несмотря на то, что я использовал метод json_encode для подготовки массивов, результаты не поддаются анализу в формате JSON.

Я очень новичок в JSON и PHP, но я попытался закодировать три массива в одну переменную, а также три разные переменные. Но в обеих ситуациях, когда я повторяю результат, это недопустимый JSON.

Я создал массивы в начале файла PHP.

 $physicianArr = array();

$patientArr = array();

$apmtArr = array();
  

Я использовал этот общий метод для заполнения всех массивов (строки используются для разбиения трех примеров, не включенных в код.)

 if (mysqli_num_rows($resultPhysician) > 0) {
  while($row=mysqli_fetch_assoc($resultPhysician)) {
    $physicianArr[] = $row;
  }
  $physicianJSON = json_encode($physicianArr);
}

if (mysqli_num_rows($resultPatient) > 0) {
  while($row=mysqli_fetch_assoc($resultPatient)) {
    $patientArr[] = $row;
  }
  $patientJSON = json_encode($patientArr);
}

if (mysqli_num_rows($resultApmt) > 0) {
  while($row=mysqli_fetch_assoc($resultApmt)) {
    $apmtArr[] = $row;
  }
  $apmtJSON = json_encode($apmtArr);
}
  

Результаты:

когда я ввожу URL-адрес для извлечения этого PHP-файла в веб-браузере, вот результат: три отдельных массива вместо одного JSON:

 [
    {"UserID":"3","FirstName":"Jane","LastName":"Parkey"}, 
    {"UserID":"4","FirstName":"Jamie","LastName":"Crane"},
    {"UserID":"5","FirstName":"Jerry","LastName":"Martin"},
    {"UserID":"6","FirstName":"Alexander","LastName":"Dollar"},
    {"UserID":"8","FirstName":"Bob","LastName":"Loblaw"},
    {"UserID":"11","FirstName":"Mary","LastName":"Robbins"},
    {"UserID":"15","FirstName":"testy","LastName":"testy"}
][
    {"UserID":"1","FirstName":"Joe","LastName":"Smith"},
    {"UserID":"2","FirstName":"Adam","LastName":"Stone"},
    {"UserID":"9","FirstName":"Michael","LastName":"Jordan"},
    {"UserID":"10","FirstName":"Tom","LastName":"Holland"},
    {"UserID":"12","FirstName":"test1","LastName":"test1"},
    {"UserID":"19","FirstName":"Will","LastName":"Smith"},
    {"UserID":"20","FirstName":"Joe","LastName":"Imburgia"}
][
    {"apmtID":"1","PhysicianID":"15","apmtDate":"Jun 26, 2019","apmtTime":"09:00:00 AM","PatientID":"1"},
    {"apmtID":"2","PhysicianID":"15","apmtDate":"test","apmtTime":"test","PatientID":"1"},
    {"apmtID":"4","PhysicianID":"15","apmtDate":"Apr 20, 2019","apmtTime":"7:10:36 AM","PatientID":"1"}
]
  

Комментарии:

1. Итак, как вы на самом деле хотите, чтобы JSON выглядел

2. Я буду анализировать JSON в Xcode с помощью Swift, я создал структуры для использования декодируемого метода, однако в настоящее время я не могу использовать этот метод, потому что результат считается недопустимым JSON. @RiggsFolly

3. структура Врач: декодируемая { пусть идентификатор пользователя: строка пусть FirstName: Строка пусть LastName: Строка } структура Пациент: декодируемая { пусть Идентификатор пользователя: строка пусть FirstName: Строка пусть LastName: строка }

4. Тогда не похоже, что вам нужен тег swift.

Ответ №1:

Вот предложение. Если вам нужна одна структура данных, тогда используйте только echo one.

 // make sure all arrays exist
$physicianArr   = [];
$patientArr     = [];
$apmtArr        = [];

if (mysqli_num_rows($resultPhysician) > 0) {
    while($row=mysqli_fetch_assoc($resultPhysician)) {
        $physicianArr[] = $row;
    }
}   

if (mysqli_num_rows($resultPatient) > 0) {
    while($row=mysqli_fetch_assoc($resultPatient)) {
        $patientArr[] = $row;
    }
}

if (mysqli_num_rows($resultApmt) > 0) {
    while($row=mysqli_fetch_assoc($resultApmt)) {
        $apmtArr[] = $row;
    }
}

echo json_encode( 
                [
                    'Physicians'    => $physicianArr
                    'Patients'      => $patientArr
                    'Ampt'          => $apmtArr
                ] 
            );
  

Комментарии:

1. Большое вам спасибо! Я видел массивы PHP, отформатированные подобным образом, но у меня возникли проблемы с пониманием этого (исходя из моего опыта, это больше напоминает мне словарь, чем массив)

2. Кто-нибудь может поправить меня, если я ошибаюсь, но, насколько я понимаю, PHP использует концепцию упорядоченных карт для реализации своих массивов; вы могли бы рассматривать массивы PHP как форму словаря, который использует целое число (индекс) в качестве ключа.

Ответ №2:

вы можете использовать функцию array_merge, чтобы ваши массивы были объединены в один. как только вы это сделаете, вы можете использовать функцию json_encode для кодирования этого одного массива, который содержит все данные из трех массивов.