将地址字符串(Google Places API)分段并添加到数组中


Cut address strings (Google Places API) in pieces and add to array

我正在使用Google Place API查找地址。一些输出示例:

Laag-Beugt 2 C, 5473 KB Heeswijk Dinther, Nederland
Industrieweg 36, 8091 AZ Wezep, Nederland
Rijakkerweg 7, 5741 RR Beek en Donk, Nederland
Antoon van Hooffplein 1, 6816 SH Arnhem, Nederland
Lingewal 2A, 6681 LJ Bemmel, Nederland
Lekdijk 120, 3999 NX Tull en Het Waal, Nederland
Concordialaan 2, 4874 NZ Etten-Leur, Nederland
Tibsterwei 4B, 9131 EG Ee, Nederland
Besser Str. 45, 34281 Gudensberg, Duitsland
Fabriekstraat 2, 9470 Denderleeuw, België

现在我想把这些字符串切成碎片,并把它们放在数组中,比如:

Array
(
    [adres] => Laag-Beugt 2C //No space between the 2 and the C
    [postcode] => 5473 KB
    [plaats] => Heeswijk Dinther
    [land] => Nederland
)
Array
(
    [adres] => Lekdijk 120
    [postcode] => 3999 NX
    [plaats] => Tull en Het Waal
    [land] => Nederland
)
Array
(
    [adres] => Tibsterwei 4B
    [postcode] => 9131 EG
    [plaats] => Ee //Shortest cityname in the Netherlands
    [land] => Nederland
)
Array
(
    [adres] => Besser Str. 45
    [postcode] => 34281
    [plaats] => Gudensberg
    [land] => Duitsland
)
Array
(
    [adres] => Fabriekstraat 2
    [postcode] => 9470
    [plaats] => Denderleeuw
    [land] => België
)

由于"邮政编码"(邮编)和"plaats"(城市)之间没有逗号,我不能使用explode。输出将类似于:

Array
(
    [adres] => Laag-Beugt 2C
    [postcode] =>  5473 KB Heeswijk Dinther
    [plaats] =>  Nederland
) 

在荷兰,邮政编码的格式是1234 AA,所以我可以用正则表达式在两个连续的大写字母后加一个逗号,但比利时的邮政编码是1234格式,德国的邮政编码则是12345格式。所以我有点困在这里了。。

谁能帮忙?

您可以在数组中使用爆炸函数

$rowAddress="Laag-Beugt 2 C, 5473 KB Heeswijk Dinther, Nederland";
$arr=explode(',',$rowAddress);
$add['adres']=$arr[0];
$add['postcode']=$arr[1];
$add['plaats']=$arr[2];
echo '<pre>';
print_r($add);

也许不是最漂亮、最高效的代码,但它确实有效。

如果有人能增强它,请这样做。

function addressArray($address) {
    $addressArray = explode(', ', $address);
    $headers = array('adres', 'postcode', 'plaats', 'land');
    if ($addressArray[2] == 'Nederland' || $addressArray[2] == 'Duitsland' || $addressArray[2] == 'België') {
        if ($addressArray[2] == 'Nederland') {
            $replace = preg_replace('/('S+'s+'S+)'s/', '$1, ', $addressArray[1], 1);
        }
        if ($addressArray[2] == 'Duitsland'|| $addressArray[2] == 'België') {
            $replace = preg_replace('/('S+)'s/', '$1, ', $addressArray[1], 1);
        }
        $replaceArray = array(1 => $replace);
        $replace = array_replace($addressArray, $replaceArray);
        $addressString = implode(', ', $replace);
        $newArray = explode(', ', $addressString);
        return array_combine($headers, $newArray);
    }
    else {
        return false;
    }
}