尝试在PHP中使用json_encode

时间:2012-06-22 18:02:45

标签: php json

这是我的小脚本

$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”来自何处?这是正常的吗?

5 个答案:

答案 0 :(得分:2)

这很正常。 mysql_fetch_array返回包含数字和关联索引的行。那不是O,而是0,意思是第一个返回的列。

答案 1 :(得分:2)

mysql_fetch_array返回字符串关联和数字关联。单独尝试mysql_fetch_assoc或mysql_fetch_row。

答案 2 :(得分:0)

请参阅mysql_fetch_array的文档:默认情况下,它返回一个包含数字和字符串索引的数组。如果只想要一个关联数组,请使用mysql_fetch_assoc或添加MYSQL_ASSOC作为mysql_fetch_array的第二个参数。

答案 3 :(得分:0)

这种情况正在发生,因为documentation状态默认情况下mysql_fetch_array会返回关联数组和数字数组。如果您只想要关联结果,可以传递一个额外的参数,如下所示:

$row = mysql_fetch_array($result, MYSQL_ASSOC);

或者,如果您只想数字索引数组:

$row = mysql_fetch_array($result, MYSQL_NUM);

答案 4 :(得分:0)

简单地替换

$row = mysql_fetch_array($result);

$row = mysql_fetch_array($result, MYSQL_ASSOC);

零将消失。

您可以选择3种结果类型。 MYSQL_NUM 会返回一个数值数组 MYSQL_ASSOC ,它会返回一个关联数组,也是你看来需要的, MYSQL_BOTH 这是默认并返回两者。