PHP数组:为值分配不同的键

时间:2013-10-22 15:25:24

标签: php arrays key-value

我知道这是一个简单的概念(虽然我很努力),但我有一些纬度和经度数据。它是从.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>

enter image description here

3 个答案:

答案 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”}]

感谢所有人的意见。欢迎批评此解决方案。