Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
SELECT index FROM post_indices WHERE region ILIKE 'Ваш регион' AND city ILIKE 'Ваш город' AND ops_type = 'П';
/190.../, я указал на Петербург, но 190000 или 190999 сервису всё равно.apt-get install dbf2mysql (предварить sudo для Ubuntu). Как пользоваться — сможете почитать по команде man dbf2mysql.dbf2mysql -d test -t dbftable -h localhost -U root -P pass -vv DOMA.DBF
dbf2mysql -d test -t dbftable -h localhost -U root -P pass -vv DOMA.DBF > file.sql
/*
Функция предназначена для нормализации написания названий населенных пунктов из базы индексов Почты России,
http://info.russianpost.ru/database/ops.html
Функция возвращает строку, где каждое слово пишется с большой буквы, кроме слов исключений
Пример:
МОСКОВСКАЯ ОБЛАСТЬ, ОДИНЦОВО -> Московская область, Одинцово
САРАТОВСКАЯ ОБЛАСТЬ, КРАСНОАРМЕЙСКИЙ РАЙОН, САДОВОЕ -> Саратовская область, Красноармейский район, Садовое
ТЮМЕНСКАЯ ОБЛАСТЬ, ХАНТЫ-МАНСИЙСКИЙ-ЮГРА АВТОНОМНЫЙ ОКРУГ -> Тюменская область, Ханты-Мансийский-Югра автономный округ
САХА (ЯКУТИЯ) РЕСПУБЛИКА, ЯКУТСК -> Саха (Якутия) Республика, Якутск
*/
function RussianPost_NormalizeWords($string, $encoding='utf-8') {
//Слова исключения, они не будут написаны с большой буквы
$exceptions = array('автономный','автономная','округ','район','область','край','немецкий','национальный');
$string = mb_strtolower(trim($string), $encoding); //перевод всех букв в нижний регистр
$word = preg_split('/[\s-]+/', $string, -1, PREG_SPLIT_OFFSET_CAPTURE); //Разделяем строку на отдельные слова (разделители: пробел, тире)
$resultstring = ''; //Результирующая строка
for($i=0; $i<count($word); $i++) {
$substr = $word[$i][0]; //Отдельное слово из строки
$substr_nothooks = str_replace(array(')','(',',','.'),'',$substr); //Удаляем скобки, запятые, точки (для проверки слова на исключение)
if(!in_array($substr_nothooks, $exceptions)) { //Если слова нет в исключениях,
$offset1 = ($substr[0]=='(') ? 2 : 1; //Смещение первой буквы, нужно для того, чтобы правило применялось к словам в скобках
$first = mb_substr($substr, 0, $offset1, $encoding); //первая буква
$rest = mb_substr($substr, $offset1, mb_strlen($substr, $encoding), $encoding); //все кроме первой буквы
$first = mb_strtoupper($first, $encoding); //Переводим первую букву в верхний регистр
$substr = $first.$rest;
}
$splitter = (isset($word[$i+1])) ? substr($string, $word[$i+1][1]-1, 1) : ''; //Определяем разделитель между словами (пробел или тире)
$resultstring .= $substr.$splitter; //Склеиваем строку из отдельных слов, устанавливаем разделители между словами (пробел или тире)
}
return $resultstring; //Возвращаем строку.
}
Если кто-то это читает, совсем не обязательно всё это преобразование регистра слов делать вручную, как выше в комментарии. Вполне можно использовать штатный mb_convert_case. Например, как здесь.
Кроме того, есть ещё проблема аббревиатур вида ММПО, которые правильно было бы сохранить как есть. Код в комментарии выше этот момент не учитывает.
Используем почтовые индексы в своём приложении во благо