2013-10-22 12 views
0

我知道这是一个简单的概念(尽管我很困难)但我有一些经纬度数据。它是从一个.data文件(而不是作为一个.db的,不是我的选择),并在这里阅读是我到目前为止有:PHP Array:将不同的键分配给值

$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”]

所以它是一个巨大的数组,每对经过一对逗号和每对引号。

我已经使用了这个,并且有大量关于php数组和键/值的信息,但是什么是正确的方法呢?我发现自己做得比想要的要复杂得多。

foreach循环假设它会像

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

对此事的任何输入赞赏。

更新:在VIM中查看数据的示例(它在视觉上不会出现白色问题,但基于使用explode,似乎确实存在)。

enter image description here

+0

你确切的问题是什么?为什么'$ latest_data [] = array('latitude'=> $ entry [the_lat_number],'longitude'=> $ entry [the_long_number]);'不工作? – Reeno

+0

你说你“假设它会是......”,你是否尝试过? –

+0

@Reeno我不打算手动输入lat或long,这没有任何意义。 @cillosis当然是。看起来'爆炸'是一个体面的方法,但是如果这是最好的,我不太确定这个不一致的空白。 – DnfD

回答

0

使用你的代码中加入每对为子阵是不错的办法。通过这种方式,您可以轻松访问每行的数据,如$latest_data[3]['latitude'](从第四行获取纬度)。

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},...] 
+0

.data文件中必须有一个空格问题(我没有权限访问):因为上面返回的是lat,但没有很长'[{“lat”:“ - 118.510”,“lng”:“ “},{”lat“:” - 120.762“,”lng“:”“},{”lat“:” - 122.959“,”lng“:”“}]' – DnfD

+0

查看文件,看看它是如何分隔。考虑到你所发布的json,我只是假设它会是空间。也许你可以用数据文件的示例来扩展你的问题(如一行或两行) – Cillier

+0

用附加图像更新原始问题。 – DnfD

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”},{“latitude”:“ - 122.959”,“longitude”:“31.716”}]

欣赏来自所有人的输入。对此解决方案欢迎批评。