Я работаю над веб-приложением, используя 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.
Какие-либо предложения?
вам нужно создать новый экземпляр $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);
В первой строке внутри вашего while
цикл, вам просто нужна следующая строка:
$frat = new \stdClass();
Вам нужно правильно объявить ваши переменные $ 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);