gpt4 book ai didi

php - json_encode 在 arrayObject 和 array() 上表现不同

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:15 26 4
gpt4 key购买 nike

我在 php 中有一个函数:

//simple method with array()
$sensors = array();
$query = "select id, x(transform(wkb_geometry,". $epsg . ")) as lon, y(transform(wkb_geometry,". $epsg . ")) as lat from mytable;";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
while ($row = pg_fetch_assoc($result)) {
//var_dump($row);
$mySensor = new sensor($row['id'],$row['lat'],$row['lon']);
$sensors[] = $mySensor->geoJSON();
}

echo json_encode($sensors);

输出:

"features": [{
"type": "Feature",
"id": 1579028,
"x": 4.85310557823,
"y": 52.7205622103,
"geometry": {
"type": "Point",
"coordinates": [4.85310557823, 52.7205622103],
"crs": {
"type": "OGC",
"properties": {
"urn": "urn:ogc:def:crs:OGC:1.3:CRS84"
}
}

现在我重写了数组,变成了这样的对象:

//advanced method with arrayObject:
class sensors extends ArrayObject {
function __construct($epsg){
$query = "select id, x(transform(wkb_geometry,". $epsg . ")) as lon, y(transform(wkb_geometry,". $epsg . ")) as lat from mytable;";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
while ($row = pg_fetch_assoc($result)) {
//var_dump($row);
$mySensor = new sensor($row['id'],$row['lat'],$row['lon']);
$this[] = $mySensor->geoJSON();
}
}
}
}
$newsensors = new sensors($epsg);
echo echo json_encode($newsensors);

但这会将输出更改为:

"features": {
"0": {
"type": "Feature",
"id": 1579028,
"x": 4.85310557823,
"y": 52.7205622103,
"geometry": {
"type": "Point",
"coordinates": [4.85310557823, 52.7205622103],
"crs": {
"type": "OGC",
"properties": {
"urn": "urn:ogc:def:crs:OGC:1.3:CRS84"
}
}
}
},

这使得它不能用作 OpenLayers 的 geoJSON。为什么 json_encode 函数会这样?我可以关闭索引号的设置吗?这可能是一个小错误吗?

最佳答案

json_encode 将对任何对象显示相同的行为,即使是像 ArrayObject 那样实现了 ArrayAccess 接口(interface)的对象;使用公共(public)属性。

要获得您想要的行为,您应该将一个实际数组传递给它,该数组可以通过调用 ArrayObject::getArrayCopy() 检索(或者您可以将对象转换为数组)。

echo json_encode($newsensors->getArrayCopy());

关于php - json_encode 在 arrayObject 和 array() 上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com