我有地址,我想爆炸只获得街道的名称。
例如,我有:“1 rue du general,75000,Paris”,我需要一个数字和街道名称的数组 阵列('1','rueduGénéral,75000,Paris')。
我想在第一次出现时爆炸,但有时候,我就是这样:“Lot 12 rueduGénéral,75000,Paris”,或者其他时间:“12 avenue du general,75000,Paris”。
所以基本上,我认为在找不到的第一个号码上爆炸会更容易吗?
答案 0 :(得分:2)
尝试
<?php
$address = "Lot 12 rue du Gal, 75000, Paris";
$street = substr($address,0,strpos($address,","));
echo $street . PHP_EOL;
$elements = explode(" ",$street);
$number = "";
$street_name = "";
foreach ($elements as $value) {
if (is_numeric($value)) {
$number = $value;
$street_name = substr($street,strpos($street, $value) + strlen($value)+1);
}
}
echo $number . PHP_EOL . $street_name . PHP_EOL;
?>
导致以下输出(针对其他2个测试用例进行测试,似乎也适用于那些)
Lot 12 rue du Gal <- street address
12 <- street number $number
rue du Gal <- street name $street_name
答案 1 :(得分:0)
您可以尝试使用Regex查找字符串中第一个出现的数字。这将为您提供字符串中的位置。如果从字符串中提取数字,则可以将其存储在时间变量中。完成此操作后,您需要从数字的END开始,取一个substr()
字符串,这样您就可以获取数字的位置并添加它的长度,以获得街道名称的开头。
答案 2 :(得分:0)
如果我理解正确,你只想得到街道名称。您应该能够使用以下正则表达式实现此目的:
[0-9+]+[,\s]*([^,]+)
或者,在您的示例的PHP代码中:
$addresses = [
'1 rue du general, 75000, Paris',
'Lot 12 rue du Général, 75000, Paris',
'12 avenue du general, 75000, Paris',
'1, Place du Général, 7500, Paris',
];
$streets = array_map(function ($address) {
if (preg_match('/[0-9+]+[,\s]*([^,]+)/', $address, $matches)) {
return $matches[1];
}
}, $addresses);
print_r($streets);
// Output:
//
// Array
// (
// [0] => rue du general
// [1] => rue du Général
// [2] => avenue du general
// [3] => Place du Général
// )
你也可以将它放在辅助函数中:
function extractStreet($address) {
if (preg_match('/[0-9+]+[,\s]*([^,]+)/', $address, $matches)) {
return $matches[1];
}
return null;
}
$addresses = [
'1 rue du general, 75000, Paris',
'Lot 12 rue du Général, 75000, Paris',
'12 avenue du general, 75000, Paris',
'1, Place du Général, 7500, Paris',
];
foreach ($addresses as $address) {
echo extractStreet($address) . PHP_EOL;
}
// Output:
//
// rue du general
// rue du Général
// avenue du general
// Place du Général