Skip to content

Instantly share code, notes, and snippets.

@Darklg
Last active February 12, 2016 22:46
Show Gist options
  • Select an option

  • Save Darklg/1f8a20a99069d52ec7c9 to your computer and use it in GitHub Desktop.

Select an option

Save Darklg/1f8a20a99069d52ec7c9 to your computer and use it in GitHub Desktop.
<?php
$address = '31 rue du 2 chat, 75011 Paris';
function extract_address_fr($address) {
$address_parts = array();
// Remove all punctuation
$address_clean = str_replace(array(',', ';'), ' ', $address);
// Remove multiple spaces
$address_clean = preg_replace('/([\s])\1+/', ' ', $address_clean);
// Extract words from address
$address_words = explode(' ', $address_clean);
// Detect zip code
foreach ($address_words as $word) {
if (preg_match("/^[0-9]{5,5}$/", $word)) {
$address_parts['zip'] = $word;
continue;
}
}
// Cut address around zip code
if (isset($address_parts['zip'])) {
$address_before_after_zip = explode($address_parts['zip'], $address_clean);
if (count($address_before_after_zip) == 2) {
// Address is everything before zip
$address_parts['address'] = trim($address_before_after_zip[0]);
// City is everything after zip
$address_parts['city'] = trim($address_before_after_zip[1]);
}
}
// Extract address number from address
if (isset($address_parts['address'])) {
preg_match('/^[0-9]+/', $address_parts['address'], $street_number);
if (count($street_number) > 0) {
$address_parts['street_number'] = $street_number[0];
}
}
return $address_parts;
}
echo '<pre>';
var_dump($address);
echo '</pre>';
echo '<pre>';
var_dump(extract_address_fr($address));
echo '</pre>';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment