Есть ли лучшая практика для преобразования строк местоположения США в отдельные части? - PullRequest
1 голос
/ 23 февраля 2011

Существует ли передовая практика или общий алгоритм для преобразования естественной строки поиска местоположения (только для США) в отдельные компоненты?

, например:

City Name, ST 00000

TO

city => City Name
state => ST
zipcode => 00000

Этодля формы, поэтому мне не нужно обрабатывать любые возможные перестановки - я могу ограничить формат чем-то вроде: city, st 00000, но мне нужно иметь возможность обрабатывать пропуск любого из сегментов в формате, чтобы они были необязательными для некоторыхстепень ... некоторые примеры поддерживаемых комбинаций (без учета регистра):

00000 // zipcode
0000-00000 //zipcode
city, st / city and state - comma separated
city st // city and state - space separated
city, st 00000 // city state zip
st 00000 // state and zip - though i only really need the zip
city 00000 // city and zip - though i only really need the zip

Я также могу использовать статический набор аббревиатур состояний, чтобы они могли потенциально совпадать для проверки сегмента состояния при необходимости.

Ответы [ 2 ]

1 голос
/ 23 февраля 2011
<code><?php
    function uslocation($string)
    {
            // Fill it with states
        $states = array('D.C.', 'D.C', 'DC', 'TX', 'CA', 'ST');

        // Extract state
        $state = '';
        foreach($states as $st)
        {
            $statepos = strpos(' '.$string, $st);
            if($statepos > 0)
            {
                $state = substr($string, $statepos-1, strlen($st));
                $string = substr_replace($string, '', $statepos-1, strlen($st));
            }
        }

        if(preg_match('/([\d\-]+)/', $string, $zipcode))
        {
            $zipcode = $zipcode[1];
            $string = str_replace($zipcode, '', $string);
        }
        else
        {
            $zipcode = '';
        }

        return array(
            'city' => trim(str_replace(',', '', $string)),
            'state' => $state,
            'zipcode' => $zipcode,
        );
    }

    // Some tests
    $check = array(
        'Washington D.C.',
        'City Name TX',
        'City Name, TX',
        'City Name, ST, 0000',
        'NY 7445',
        'TX 23423',
    );

    echo '<pre>';
    foreach($check as $chk)
    {
        echo $chk . ": \n";
        print_r(uslocation($chk));
        echo "\n";
    }
    echo '
';?>
0 голосов
/ 23 февраля 2011

Во время исследования я обнаружил другой код, указанный в другом SO вопросе , который я использовал, пока ждал ... Я изменил код, чтобы он поддерживал получение почтового индекса, а также города:http://www.eotz.com/2008/07/parsing-location-string-php

Другие могут также найти это полезным.

@ delphist: СПАСИБО.Как только у меня будет время сравнить точность и производительность, я могу переключиться на ваш код, если он лучше - он, конечно, проще / короче!Если я это сделаю, я отмечу это как официальный ответ.

...