我知道这是一个简单的概念(虽然我很努力),但我有一些纬度和经度数据。它是从.data文件中读取的(不是.db,而不是我的选择),这是我到目前为止所拥有的:
$current_data = file("/my_data_file.data");
$latest_data = array();
foreach ($current_data as $entry)
{
$latest_data[] = $entry;
}
$latest_data = preg_replace("!\r?\n!", "", $latest_data);
echo json_encode($latest_data);
这样就输出了这样的数据(没有在这里粘贴所有数据以防止出血):
[“ - 118.510 33.896”,“ - 120.762 32.826”,“ - 122.959 31.716”,“ - 125.104 30.570”,“ - 127.198 29.389”,“ - 129.243 28.175”,“ - 131.243 26.931”,“ -133.198 25.660“,” - 135.112 24.362“,” - 136.988 23.041“]
所以它是一个巨大的数组,每个纬度/长对由逗号分隔,每对都在引号内。
我已经用Google搜索了这一点,并且有关于php数组和键/值的大量信息,但是正确的方法是什么?我发现自己比这更复杂。
假设在foreach
循环中,它将类似于
$latest_data[] = array('latitude' => $entry[the_lat_number], 'longitude' => $entry[the_long_number]);
对此事的任何意见表示赞赏。
更新:在VIM中查看的数据示例(它在视觉上看不到有任何空白问题,但基于使用explode
,似乎确实如此)。< / p>
答案 0 :(得分:1)
$current_data = file("/my_data_file.data");
$latest_data = array();
foreach ($current_data as $entry)
{
list($lat,$lng) = explode(" ",$entry);
$latest_data[] = array('lat' => $lat, 'lng' => $lng);
}
现在你的json数据应该是这样的:
[{lat: xx, lng: xx},...]
答案 1 :(得分:0)
使用您的代码将每个对添加为子数组是一种很好的方法。这样,您就可以轻松访问每行中的数据,例如$latest_data[3]['latitude']
(从第四行获取纬度)。
答案 2 :(得分:0)
好的,我最终使用preg_split
代替explode
,似乎一切正常:
$current_data = file("/tmp/navhome/data/path_tail.data");
$latest_data = array();
foreach ($current_data as $entry) {
$coords = preg_split("/ +/", $entry);
$latest_data[] = array('latitude' => $coords[0], 'longitude' => $coords[1]);
}
echo json_encode($latest_data);
这是在飞行路径发生变化时更新的飞机数据,因此似乎preg_split
更合适。
这样输出的数据如下:
[{ “纬度”: “ - 118.510”, “经度”: “33.896”},{ “纬度”: “ - 120.762”, “经度”: “32.826”},{ “纬度”: “-122.959”, “经度”: “31.716”}]
感谢所有人的意见。欢迎批评此解决方案。