Попытка json_encode в PHP

Вот мой маленький скрипт

$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, который является значением по умолчанию, и возвращает оба.