0

我知道这是一个简单的概念(尽管我很难理解)但我有一些纬度和经度数据。它是从 .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","-1033"98256. -135.112 24.362 ","-136.988 23.041 "]

所以它是一个巨大的数组,每个纬度/经度对用逗号分隔,每一对都用引号括起来。

我用谷歌搜索了这个,有大量关于 php 数组和键/值的信息,但是正确的方法是什么?我发现自己使这比需要的复杂得多。

假设在foreach循环中它会像

$latest_data[] = array('latitude' => $entry[the_lat_number], 'longitude' => $entry[the_long_number]);

对此事的任何意见表示赞赏。

更新:在 VIM 中查看的数据示例(从视觉上看没有出现空格问题,但基于 using explode,似乎确实存在)。

在此处输入图像描述

4

3 回答 3

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},...]
于 2013-10-22T15:29:37.603 回答
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"}]

感谢大家的投入。欢迎对此解决方案提出批评。

于 2013-10-22T16:18:37.630 回答
0

使用您的代码将每一对添加为子数组是一种不错的方法。这样,您就可以像这样轻松地访问每一行的数据$latest_data[3]['latitude'](从第四行获取纬度)。

于 2013-10-22T15:28:59.380 回答