我有一张包含国家/地区列表的表格,我使用
从表格中选择所有国家/地区$query = $conn->query("SELECT * FROM countries");
我现在需要将此结果转换为JSON数组/对象,以便在我的Android应用程序中使用,但是我只能从表中返回最后一个国家。
我如何将整个结果/国家/地区列表转换为JSON以用于我的应用程序?
$response = array();
while($row = mysqli_fetch_assoc($query))
{
$response["country"] = $row;
}
echo json_encode ( $response );
答案 0 :(得分:2)
您可以使用mysqli_fetch_all之类的
$response = array();
$response['country'] = mysqli_fetch_all($query, MYSQLI_ASSOC);
echo json_encode($response);
答案 1 :(得分:1)
如果您或未来的读者仍然不确定为什么您正在做的事情无效,那么当您在while
循环中使用以下代码时:
$response["country"] = $row;
在循环的第一次迭代中,创建$response
数组,使用一个键("country"
),并将$row
的值分配给该键。在每次后续迭代中,"country"
密钥被覆盖,其新值为$row
。这就是为什么你最后只有最后一个国家。
将其更改为
时$response["country"][] = $row;
正如几个人所建议的那样,您为"country"
键分配了一个数组,并将$row
的值附加到其中,并在每次后续迭代中添加$row
的新值附加到该数组,因此在循环结束时,您将拥有所有国家/地区。
fetchAll()
方法是一种快捷方式,可以排除在循环中获取行的需要。它确实附带了一些你可以在the documentation中阅读过的警告,但如果你的结果集不是太大而你只是去json_encode
并直接输出它,就像你在这里做的那样,这是一个合乎逻辑的选择。
答案 2 :(得分:0)
.idea
答案 3 :(得分:0)
如果您可以使用$response["country"] = $row;
所有$row
数据,则每个循环都会在$response
变量中初始化。因此,如果您返回$response
数组,则可以获得最后的数据。
所以,请遵循以下代码
$response = array();
while($row = mysqli_fetch_assoc($query))
{
$response["country"][] = $row;
}
echo json_encode ( $response );
如果您认为不使用while循环,那么您也可以使用代码
$response = array();
$response['country'] = mysqli_fetch_all($query, MYSQLI_ASSOC);
echo json_encode($response);