如何将php对象从数据库循环到Json?

时间:2018-04-18 15:24:09

标签: php

尝试从数据库中获取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}}

2 个答案:

答案 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]);