regex — анализ KML-координат с Google Maps

Я пытаюсь собрать координаты (долгота и широта) из файла Google KML с помощью PHP.

<Point>
<coordinates>45.51088930166307,52.52216552154544</coordinates>
</Point>

Я могу разбить координаты запятой и получить результаты, как показано ниже:

[0] => 45.51088930166307
[1] => 52.52216552154544

Чтобы получить этот результат я использую:

explode(',', $coordinates);

Как мне взорвать координаты запятыми?

<Point>
<coordinates>45.51088930166307,51,52.52216552154544,75</coordinates>
</Point>

Результаты, которые мне нужны:

[0] => 45.51088930166307,51
[1] => 52.52216552154544,75

И как мне убрать цифры после запятых?

[0] => 45.51088930166307
[1] => 52.52216552154544

Спасибо,

0

Решение

Вы можете разделить строку запятой, за которой следуют цифры и точка:

preg_split('~,(?=\d+\.)~', $s)

Увидеть regex demo.

подробности

  • , — запятая, которая …
  • (?=\d+\.) — сразу же с 1 или более цифрами (\d+) и точка (\.).

PHP демо:

$s = '45.51088930166307,51,52.52216552154544,75';
$res = preg_split('~,(?=\d+\.)~', $s);
print_r($res);
// => Array ( [0] => 45.51088930166307,51 [1] => 52.52216552154544,75 )
1

Другие решения

Решением, не являющимся регулярным выражением, является использование strpos, чтобы найти позицию второй запятой и разделить строку там.

$str = "45.51088930166307,51,52.52216552154544,75";
if(substr_count($str, ",")>1){
$pos = strpos($str, ",", strpos($str, ",")+1); // find second comma
// The inner strpos finds the first comma and uses that as the starting point to find the second comma.
$arr = [substr($str, 0,$pos), substr($str,$pos+1)]; //split string at second comma
}else{
$arr = explode(",", $str);
}
var_dump($arr);

https://3v4l.org/nnrlV

0

По вопросам рекламы [email protected]