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

Я использую 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ë
)

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

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

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

Кто-то, кто может помочь?

1

Решение

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

$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);
1

Другие решения

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

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

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

По вопросам рекламы [email protected]