PHP заполняет JSON дубликатами последнего элемента

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

Вот что у меня так далеко:

$result = mysqli_query($db, $query);
$row = mysqli_fetch_array($result);

$frats = array();
while ($row = mysqli_fetch_array($result)) {
$frat->name = $row['name'];
$frat->description = $row['description'];
$frat->chapter = $row['chapter'];
$frat->members = $row['members'];
$frat->cover_image = $row['cover_image'];
$frat->profile_image = $row['profile_image'];
$frat->calendar_image = $row['calendar_image'];
$frat->preview_image = $row['preview_image'];
$frat->address = $row['address'];
$frats[] = $frat;
}

echo json_encode($frats);

Что я получаю взамен, в правильном формате json, который я хочу, с правильными ключами и всем остальным, но все элементы в json одинаковы. Все они последние. Я считаю, что это потому, что я мог просто ссылаться на значения, но я не уверен, как на самом деле скопировать их в php.

Какие-либо предложения?

1

Решение

вам нужно создать новый экземпляр $frat внутри петли. В противном случае вы просто обновляете оригинал $frat каждый раз, когда цикл запускается и добавляется ссылка на него в массиве.

Предполагая, что это не статический класс, вы можете использовать:

$frats = array();
while ($row = mysqli_fetch_array($result)) {
$frat = new frat();
$frat->name = $row['name'];
$frat->description = $row['description'];
$frat->chapter = $row['chapter'];
$frat->members = $row['members'];
$frat->cover_image = $row['cover_image'];
$frat->profile_image = $row['profile_image'];
$frat->calendar_image = $row['calendar_image'];
$frat->preview_image = $row['preview_image'];
$frat->address = $row['address'];
$frats[] = $frat;
}

echo json_encode($frats);

Еще лучше изменить конструктор или создать метод для использования данных. Если вы использовали конструктор класса, вы могли бы сделать что-то вроде этого:

$frats = array();
while ($row = mysqli_fetch_array($result)) {
$frats[] &= new frat($row['name'], $row['description'], $row['chapter']);
}

echo json_encode($frats);
3

Другие решения

В первой строке внутри вашего while цикл, вам просто нужна следующая строка:

$frat = new \stdClass();
1

Вам нужно правильно объявить ваши переменные $ frats (массив) и $ frat (объект):

$frats = array();
while ($row = mysqli_fetch_array($result)) {
$frat = (object) array();
$frat->name = $row['name'];
$frat->description = $row['description'];
$frat->chapter = $row['chapter'];
$frat->members = $row['members'];
$frat->cover_image = $row['cover_image'];
$frat->profile_image = $row['profile_image'];
$frat->calendar_image = $row['calendar_image'];
$frat->preview_image = $row['preview_image'];
$frat->address = $row['address'];
array_push($frats, $frat); // For backward compatiblity
}

echo json_encode($frats);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector