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". -135.112 24.362 ","-136.988 23.041 "]

したがって、これは 1 つの巨大な配列であり、各緯度/経度のペアがコンマで区切られ、各ペアが引用符で囲まれています。

私はこれをグーグルで検索しました.PHP配列とキー/値に関する情報はたくさんありますが、それを行う正しい方法は何ですか? 私はこれを必要以上に複雑にしていることに気づきました。

foreachループで次のようになると仮定します

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

この問題に関するご意見をお待ちしております。

更新: VIM で表示されたデータの例 (空白の問題が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'](4 行目から緯度を取得するため)。

于 2013-10-22T15:28:59.380 に答える