Попробуйте:
$str = 'Stackstreet 14a';
$matches= explode(" ", $str);
print_r($matches);
После этого вы можете проверить каждый элемент в $ сопоставлено, чтобы обнаружить, если элемент содержит цифру. если элемент содержит цифру, то его номер остаётся его частью названия улицы. Например:
$matches= Array ([0] => Stackstreet [1] => 14a)
"Stackstreet"
- не содержат цифры ==> название улицы.
"14a"
- содержит цифру ==> номер.
Это как обнаружить это строка содержит цифры:
$myString="14a";
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
echo 'Contains at least one letter and one number';
}
Другой способ:
По b01:
Попробуйте это как посмотреть, если он работает для вас :
$subjects = array("street 12", "street12", "street 12a", "street12a");
foreach($subjects as $subject)
{
if (preg_match('/([^\d]+)\s?(.+)/i', $subject, $result))
{
var_dump($result);
}
}
die_r($result );
Единственная часть вам нужно это:
// Find a match and store it in $result.
if (preg_match('/([^\d]+)\s?(.+)/i', $subject, $result))
{
// $result[1] will have the steet name
$streetName = $result[1];
// and $result[2] is the number part.
$streetNumber = $result[2];
}
Кредитb01.
Не могли бы вы представить пример значений? – BlitZ
В зависимости от того, насколько значения меняются, это может быть очень тяжело. Возможно, вы можете отправить данные через Google Geocoder, который возвращает результаты, подобные этому? https://developers.google.com/maps/documentation/geocoding/#XML –
Является ли это базой данных MySQL? –