Замените исландские названия месяцев на английские названия месяцев с помощью массива

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

$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 символа от слова.

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

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

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

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

Или же :

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

ОБНОВИТЬ:

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

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

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

Я бы хотел посмотреть, что вы пробовали до сих пор ....

Aman Chhabra 02.07.2018 06:42

вы знаете каждую версию названия каждого месяца, которую нужно заменить?

user9487972 02.07.2018 06:45

@mickmackusa, я знаю, что это не бесплатная услуга кодирования, в своем вопросе я предоставил некоторую информацию о своих идеях. Может быть, я мог бы что-то сделать, но это может быть не лучшим способом и потребует много кода и времени выполнения. Это будет выполнено на реальном веб-сайте.

user9929968 02.07.2018 12:23

@mickmackusa, Также вы имеете право удалить свой ответ, я его не видел, но все равно спасибо.

user9929968 02.07.2018 12:24

Я поделился способами, с помощью которых, как я думаю, это можно сделать, используя массивы, два массива или один массив. Ключ - английский, а значение - исландское. Но что, если то, что я пробовал, сильно отличается от вашего ответа?

user9929968 02.07.2018 12:33

@mickmackusa, вопрос обновлен

user9929968 03.07.2018 06:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код: (Демо)

$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() будет использоваться, потому что функциональные процессы будут применяться к каждому матчу.

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

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

Спасибо, я впервые вижу некоторые функции: D, но у меня вопрос: «Может ли $ test быть переменной, а не массивом?»

user9929968 03.07.2018 06:23

Определенно да. Именно так я показал универсальность решения.

mickmackusa 03.07.2018 06:24

Другие вопросы по теме