我试图从mysql中获得一个格式化程序json,但我不知道如何获得。
$query = 'SELECT data1,data2,data3,data4 FROM database';
$dbquery = mysql_query($query);
$geojson = array();
while($row = mysql_fetch_assoc($dbquery)) {
$feature = array('loc' => $row['data1'],$row['data2'],'title' => $row['data3'], $row['data4']);
array_push($geojson,$feature);
};
echo json_encode($geojson);
该输出:
[{"loc":data1,"0":data2,"title":"data3","1":"data4"},
{"loc":data1,"0":data2,"title":"data3","1":"data4"}]
我想要这个:
[{"loc":[data1,data2], "title":"data3 data4"},
{"loc":[data1,data2], "title":"data3 data4"}]
我应该更改代码中的哪些内容?
尝试这个查询,看看它是否为您提供了需要的输出
SELECT
CONCAT('[',
GROUP_CONCAT('
CONCAT('{"loc": [', data1, data2, '], ')
, CONCAT('"title": "', data3, data4 ,'"}')
)
, ']')
FROM database
你也可以做一些类似的事情
SELECT
CONCAT(data1,data2) AS loc
, CONCAT(data3,data4) as title
FROM database';
然后在PHP中,您可以执行
$feature = array(array('loc'=> $row['loc'],
'title' => $row['title']));
echo json_encode($feature);
您的循环不正确,应该是:
while($row = mysql_fetch_assoc($dbquery)) {
$feature = array('loc' => array(
$row['data1'],$row['data2']
),
'title' => $row['data3'] .' '.$row['data4']
);
array_push($geojson,$feature);
};
您应该这样更改$feature行:
$feature = array('loc' => array($row['data1'], $row['data2']),'title' => $row['data3'].' '.$row['data4']);
这将为每一行生成如下所示的json blob:
{"loc":["data1","data2"],"title":"data3 data4"}
解释
loc:你想要一个数组。因此,您必须在PHP中使用array((来定义它。如果您想将值强制转换为数字,只需在需要时键入即可:
数组((浮点($row〔'data1'〕,(浮点($row〔'ddata2'〕(
title:只需将两个字符串用点和中间的空格连接起来。