Я играю с идеей гостевой книги / чата и имеет настройку таблицы MySQL с тремя столбцами:
1 – id – автоматический прирост основного ключа
2 – имя – строка
3 – комментарий – строка
У меня очень мало опыта работы с PHP, но это то, что я собрал для этой операции:
$result = mysql_query("SELECT * FROM guestbook"); $i = 0; while($row = mysql_fetch_array($result)) { //add the row to the $chat array at specific index of $i $chat[$i] = $row; $i += 1; } $encode = json_encode($chat); echo "$encode";
Однако выход из этого выглядит довольно ужасно:
[{"0":"1","id":"1","1":"Justin ","name":"Justin ","2":"Comment 1","comment":"Comment 1"}, {"0":"2","id":"2","1":"Justin ","name":"Justin ","2":"Another comment","comment":"Another comment"}, {"0":"3","id":"3","1":"Justin ","name":"Justin ","2":"Look at this comment!","comment":"Look at this comment!"}, {"0":"4","id":"4","1":"Justin ","name":"Justin ","2":"Ok I'm done talking","comment":"Ok I'm done talking"}]
Я надеялся получить три поля: id, имя и комментарий, но похоже, что вещи удваиваются. Может ли кто-нибудь помочь?
Благодаря!
Перефразируя Марка, просто замените эту строку:
while($row = mysql_fetch_array($result))
С этим:
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
Получить чище JSON. По умолчанию mysql_fetch_array()
возвращает как целочисленный индекс, так и ассоциативный индекс, вам нужен только ассоциативный индекс.
mysql_fetch_array возвращает составной массив: indexed AND keyed. Для получения только одного или другого, используйте mysql_fetch_row()
(только для индексирования), mysql_fetch_assoc()
(только для ключей) или используйте дополнительный аргумент в fetch_array, чтобы указать, что вы хотите: mysql_fetch_array($result, MYSQL_BOTH);