Intentando json_encode en PHP

Aquí está mi pequeño script

$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)); 

El resultado es esto:

  {"0":"4.5","AverageRating":"4.5"} 

Mi pregunta es: ¿De dónde viene la fila “0”? ¿Esto es normal?

mysql_fetch_array devuelve una asociación de cadena y una asociación numérica. Pruebe mysql_fetch_assoc o mysql_fetch_row solo.

Es normal. mysql_fetch_array devuelve la fila con índices numéricos y asociativos. Eso no es un O, sino un 0, es decir, la primera columna devuelta.

Consulte el documento de mysql_fetch_array : de forma predeterminada, devuelve una matriz con índices numéricos y de cadenas. Si solo desea una matriz asociativa, use mysql_fetch_assoc o agregue MYSQL_ASSOC como segundo parámetro de mysql_fetch_array.

Eso está sucediendo porque, como dice la documentación , por defecto mysql_fetch_array devuelve una matriz asociativa y una numérica. Si solo desea los resultados asociativos, puede pasar un parámetro adicional, como ese:

 $row = mysql_fetch_array($result, MYSQL_ASSOC); 

O si solo desea que el conjunto esté indexado numéricamente:

 $row = mysql_fetch_array($result, MYSQL_NUM); 

Simplemente reemplace

 $row = mysql_fetch_array($result); 

con

 $row = mysql_fetch_array($result, MYSQL_ASSOC); 

y el cero desaparecerá

Hay 3 tipos de resultados entre los que puede elegir. MYSQL_NUM que devolverá una matriz numérica, MYSQL_ASSOC que devolverá una matriz asociativa y también es lo que parece necesitar, y MYSQL_BOTH que es el valor predeterminado y devuelve ambos.