Замените исландские названия месяцев английскими названиями месяцев, используя массив - PullRequest
0 голосов
/ 02 июля 2018

У меня есть некоторые переменные даты, которые содержат название исландских месяцев, например:

$date = '27. júní 2018 04:53';

Я хочу заменить названия этих месяцев английскими названиями месяцев:

$icelandic = array('Janúar', 'Febrúar', 'Mars', 'Apríl', 'Maí', 'Júní', 'Júlí', 'Ágúst', 'September', 'Oktober', 'Nóvember', 'Desember');

Или ассоциативный массив:

 $icelandic = array('Janúar' => '', 'Febrúar' => '', 'Mars' => '', 'Apríl' => '', 'Maí' => '', 'Júní' => '', 'Júlí' => '', 'Ágúst' => '', 'September' => '', 'Oktober' => '', 'Nóvember' => '', 'Desember' => '');

Как вы видите или знаете, названия месяцев не являются целым словом, но, возможно, всего 3 или 4 символа из слова.

Так что, если часть этих значений в массиве существует в переменной date, то она заменяется английским месяцем.

Замененные английские месяцы могли бы быть целым миром, как new DateTime() обрабатывает это.

Таким образом, вышеуказанная переменная может быть:

$date = '27. june 2018 04:53';

Или:

$date = '27. jun 2018 04:53';

UPDATE:

Что я пробовал:

$icelandic = array('Janúar', 'Febrúar', 'Mars', 'Apríl', 'Maí', 'Júní', 'Júlí', 'Ágúst', 'September', 'Oktober', 'Nóvember', 'Desember');

$english = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

for($i=0; $i < count($icelandic); $i++) {
    $date = str_replace($icelandic[$i], $english[$i], $date);
}

Или сначала чек, используя strpos():

if(strpos($icelandic[$i], $date)){
    $date = str_replace($icelandic[$i], $english[$i], $date);
}

Я не знаю краткую форму английского и исландского месяцев в форме даты.

1 Ответ

0 голосов
/ 02 июля 2018

Код: ( Демо )

$icelandic = array(
    'jan' => 'January',
    'feb' => 'February',
    'mar' => 'March',
    'apr' => 'April',
    'maí' => 'May',
    'jún' => 'June',
    'júl' => 'July',
    'ágú' => 'August',
    'okt' => 'October',
    'sep' => 'September',
    'nóv' => 'November',
    'des' => 'December',
);

$tests = array(
    '1. júní 2018 04:53',
    '2. Ágú 2018 04:53',
    '3. Maí 2018 04:53',
    '4. nóvember 2018 04:53',
    '5. Des 2018 04:53'
);

foreach ($tests as $test) {
    echo "\n$test -> ";
    echo preg_replace_callback('~(' . implode('|', array_keys($icelandic)) . ')\pL*~iu', function($m)use($icelandic) {
            return  $icelandic[mb_strtolower($m[1], 'UTF-8')];
         }, $test);
}

Выход:

1. júní 2018 04:53 -> 1. June 2018 04:53
2. Ágú 2018 04:53 -> 2. August 2018 04:53
3. Maí 2018 04:53 -> 3. May 2018 04:53
4. nóvember 2018 04:53 -> 4. November 2018 04:53
5. Des 2018 04:53 -> 5. December 2018 04:53

Вот логика:

Ваш поисковый массив должен иметь:

  1. клавиши, содержащие первые три исландские буквы (с ударениями) в нижнем регистре
  2. значения, содержащие желаемое английское название месяца (я использую полное название месяца)

preg_replace_callback() будет использоваться, потому что функциональные процессы будут применяться к каждому совпадению.

Шаблон состоит из всех ключей поиска, связанных вместе с | (для представления логики ИЛИ). Эти первые три символа хранятся в Capture Group # 1. Необязательные конечные буквы соответствуют \pL*, что является версией «любая буква» в безопасном для Unicode формате. Модификатор i разрешает сопоставление без учета регистра. Модификатор u позволяет сопоставлять символы Юникода.

Первая группа захвата ($m[1]) будет преобразована в (многобайтово-безопасный) нижний регистр, а затем использована для доступа к требуемому значению из массива поиска, который заменит совпадение «fullstring» ($m[0]), так что ни один из оригинальное исландское слово останется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...