尝试从数据库中获取latlng并编码为Json,但我只获得了1个结果。
$geo= new stdClass();
while( $rows = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$name=$rows['Name'];
$lat=$rows['Latitude'];
$lng=$rows['Longitude'];
$intlat=(float)$lat;
$intlng=(float)$lng;
$latlng = $lat.",".$lng;
$geo->lat=$intlat;
$geo->lng=$intlng;
}
$try1=json_encode(array("location"=>$geo));
echo $try1;
结果{"location":{"lat":13.811,"lng":100.612}}
但我想要的是{"location":{"lat":13.811,"lng":100.612},{"lat":v2,"lng":v2},{"lat":v3,"lng":v3},{"lat":v4,"lng":v4}}
答案 0 :(得分:2)
您不在循环中构建对象或数组。如果在您的查询中只是SELECT Latitude AS lat, Longitude as lng ...
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$geo[] = array_map('floatval', $row);
}
echo json_encode(array('location' => $geo));
答案 1 :(得分:2)
如果要添加多个位置,则应初始化数组以保存它们,而不是stdClass对象。如果您担心结果最终会成为对象而不是生成的JSON中的数组,那么它就没问题了。如果一个数组有字符串键(就像内部数组一样),它将被编码为JSON中的一个对象。
$geo = [];
然后在您获取行时,在执行您需要执行的任何转换后将它们附加到数组中。
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) {
$geo[] = ['lat' => (float) $row['Latitude'], 'lng' => (float) $row['Longitude']];
}
echo json_encode(["location" => $geo]);