Я получаю некоторые данные из базы данных и кодирую их в json:
$json = ""; if($result = $dbc->query($query)) { $num = $result->num_rows; for($i = 0; $i < $num; $i++) { $row = $result->fetch_array(); $json .= json_encode($row); if($i != ($num-1)) { $json .= ','; } } }
но вместо того, чтобы получить строку json в формате:
{"name:"joe", "age":"22", "etc":"etc"}
Я получаю каждое значение, дублируемое, потому что оно дает мне имя элемента как индекс ассоциативного и неассоциативного массива. Поэтому я получаю:
{"0":"joe", "name":"joe", "1":"22", "age":"22", "3":"etc", "etc":"etc"}
Хотя я все еще могу использовать json. Он по-прежнему в два раза больше, чем я хочу, и поэтому неэффективен. В любом случае я могу получить метод json_encode, чтобы просто дать мне ассоциативные массивы в виде json-тегов? (Неправильные слова, чтобы описать эти вещи без сомнения)
Большое спасибо
Это потому, что вы используете fetch_array()
(выделение мое):
mysqli_fetch_array () – это расширенная версия функции mysqli_fetch_row (). В дополнение к хранению данных в числовых индексах массива результатов функция mysqli_fetch_array () также может хранить данные в ассоциативных индексах, используя имена полей результирующего набора как ключи.
fetch_assoc()
этого используйте fetch_assoc()
.
Просто измените $row = $result->fetch_array();
to $row = $result->fetch_assoc();
Пекка, вероятно, прав, но я хотел бы добавить, что вы делаете больше работы для себя, вызывая json_encode()
для каждой строки. Вероятно, лучше построить структуру данных, а затем вызвать json_encode()
:
$rows = array(); if ($result = $dbc->query($query)) { $num = $result->num_rows; for ($i = 0; $i < $num; $i++) { $rows[] = $result->fetch_assoc(); } } $json = json_encode($rows);
Маркировка как вики сообщества, так как это предложение на практике, а не ответ .