Разрезать адресные строки (Google Places API) на части и добавить в массив

1

Я использую API Google Place для поиска адресов. Некоторые примеры вывода:

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ë
)

Поскольку между "почтовым индексом" (zipcode) и "plaats" (городом) нет запятой, я не могу использовать explode. Выход будет выглядеть так:

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

В Nederlands zipcode находится в этом формате 1234 AA, поэтому я могу использовать регулярное выражение для запятой после двух последовательных столиц, но zipcodes в Бельгии имеют формат 1234 и в Германии в 12345. Так что я немного застрял здесь.

Кто-нибудь, кто может помочь?

  • 0
    Что вы уже пробовали? Опубликуйте свои попытки тоже ..
  • 0
    @Uchida Я обновил свой вопрос.
Теги:
google-places-api

2 ответа

1

Вы можете использовать функцию explode, чтобы сделать ее в массиве

$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);
  • 0
    В этом случае Explode бесполезен, потому что между 5473 KB Heeswijk Dinther (почтовый индекс, цифры (почтовый индекс, город)) запятой нет.
0

Возможно, это не самый красивый и эффективный фрагмент кода, но он работает.

Если кто-то может его улучшить, пожалуйста.

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;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню