我在 MySQL 表中有一个 json 列,其中包含此示例的数据:
[
[
-79.4936969567481,
37.3504643767627
],
[
-79.4936969567481,
37.3504643767627
]
]
我有一个函数,我想分别在数组成员的第一个值和第二个值之前附加 'lat' => 和 'lng' => 键。到目前为止我已经:
$polygons = Polygon::get();
foreach ($polygons as $polygon) {
$coordinates = $polygon->coordinates;
// Transform the coordinates
$newCoordinates = array_map(function ($coordinate) {
return [
'lat' => $coordinate[0],
'lng' => $coordinate[1],
];
}, $coordinates);
// Update the model's coordinates column
$polygon->coordinates = $newCoordinates;
$polygon->save();
}
然而,它的结果是
[
{
"lat": -79.4936969567481,
"lng": 37.3504643767627
},
{
"lat": -79.4936789563065,
"lng": 37.3504513771715
}
]
我可能做错了什么? { 应替换为 [,} 替换为 ] 和 : 替换为 =>
Mysql会将其保存为json(您描述的格式)。那里没有什么问题。但是,您可以向您的
Polygon
模型添加强制转换,以便它返回一个 php 数组给您。
class Polygon extends Model
{
protected function casts()
{
return [
'coordinates' => 'array'
];
}
}