Мне нужно извлечь координаты широты и долготы из строки, используя php. Строка всегда будет отформатирована так:
"(42.32783298989135, -70.99989162915041)"
Однако длина каждого значения будет варьироваться от использования к использованию. Каков наилучший способ извлечь значения? Спасибо!
Вы можете использовать sscanf для этого:
sscanf($string, '"(%f, %f)"', $lat, $lng);
Тест:
php > sscanf('"(42.32783298989135, -70.99989162915041)"', '"(%f, %f)"', $lat, $lng); php > var_dump($lat, $lng); float(42.327832989891) float(-70.99989162915)
$withoutParentheses = substr($string, 1, -1); $coordinates = explode(', ', $coordinates); $longitude = floatval($coordinates[0]); $latitude = floatval($coordinates[1]);
Вы можете использовать регулярное выражение для извлечения чисел из скобок, а затем использовать команду explode для разбиения чисел в массив.
explode
Ваше регулярное выражение будет что-то вроде
/(-?[0-9]+.[0-9]+, -?[0-9]+.[0-9]+)/
и ваш разделитель для команды взрыва будет запятой.
Вы можете сделать что-то вроде этого:
$str = "(42.32783298989135, -70.99989162915041)"; function extractlatlong($str){ $latlong = explode(",",$str); if(count($latlong) == 2){ $lat = preg_replace("%[^0-9.]%","",$latlong[0]); $long = preg_replace("%[^0-9.]%","",$latlong[1]); return array("lat"=>$lat,"long"=>$long); } else { return NULL; } } print_r(extractlatlong($str));
Вот что я придумал сам:
function LatFromString($mCenterString){ //(42.32783298989135, -70.99989162915041) $mLatLong = explode(",", $mCenterString); $mLat = ''; if(count($mLatLong) == 2){ $mLat = substr($mLatLong[0], 1); } return $mLat; } function LongFromString($mCenterString){ //(42.32783298989135, -70.99989162915041) $mLatLong = explode(",", $mCenterString); $mLat = ''; if(count($mLatLong) == 2){ $mLong = substr($mLatLong[1], 0, -1); } return $mLong; }
Как это выглядит?