如何在第一个字符串数上爆炸

时间:2015-04-13 15:26:34

标签: php explode

我有地址,我想爆炸只获得街道的名称。

例如,我有:“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”。

所以基本上,我认为在找不到的第一个号码上爆炸会更容易吗?

3 个答案:

答案 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]*([^,]+)

Regular expression visualization

Debuggex Demo

或者,在您的示例的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