Вот мой маленький скрипт
$item="Inception"; $query="SELECT * FROM items WHERE item = '{$item}' LIMIT 1"; $result=mysql_query($query); while ($row = mysql_fetch_array($result)) { $item_id = $row['items_id']; } $sql="SELECT AVG(rating) AS AverageRating FROM ratings WHERE item_id = '{$item_id}'"; $result=mysql_query($sql); $row=mysql_fetch_array($result); print(json_encode($row));
Вывод:
{"0":"4.5","AverageRating":"4.5"}
Мой вопрос: откуда начинается строка «0»? Это нормально?
mysql_fetch_array возвращает как ассоциацию строк, так и числовую ассоциацию. Попробуйте mysql_fetch_assoc или mysql_fetch_row.
Это нормально. mysql_fetch_array
возвращает строку с числовыми и ассоциативными индексами. Это не O, а 0, то есть первый возвращенный столбец.
См. Doc mysql_fetch_array : по умолчанию он возвращает массив с индексом numeric и strings. Если вам нужен только ассоциативный массив, используйте mysql_fetch_assoc или добавьте MYSQL_ASSOC в качестве второго параметра mysql_fetch_array.
Это происходит потому, что, как указывает документация , по умолчанию mysql_fetch_array
возвращает как ассоциативный массив, так и числовой. Если вы просто хотите получить ассоциативные результаты, вы можете передать дополнительный параметр, например:
$row = mysql_fetch_array($result, MYSQL_ASSOC);
Или, если вы просто хотите, чтобы массив индексировался численно:
$row = mysql_fetch_array($result, MYSQL_NUM);
Просто замените
$row = mysql_fetch_array($result);
с
$row = mysql_fetch_array($result, MYSQL_ASSOC);
и ноль исчезнет.
Это 3 типа результатов, которые вы можете выбрать. MYSQL_NUM, который вернет числовой массив MYSQL_ASSOC, который вернет ассоциативный массив, а также то, что вам кажется нужным, и MYSQL_BOTH, который является значением по умолчанию, и возвращает оба.