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

У меня есть файл констант, который выглядит так (с использованием laravel, поэтому константа выглядит так):

<?php

return [
    'languages' => [
        'names' => [
            'Bulgarian' => 'bg',
            'Danish' => 'da',
            'German' => 'de',
            'English' => 'en'
            ...
        ],
    ]
];

Моя функция до сих пор выглядит так:

public static function replaceName($string = '')
{
    $langName = Config::get('constants.languages.names');
    foreach($langName as $langKey => $langValue)
    {
        $search  = array($langValue);
        $replace = array($langKey);
    }
    return str_replace($search, $replace, $string);
}

Но все равно не работает никаких идей?

2
utdev 22 Дек 2016 в 19:06
1
Вы хотите заменить «немецкий» на «де»? Затем сделайте return str_replace(array_keys( $langName), $langName, $string); еще return str_replace($langName,array_keys( $langName), $string);
 – 
JustOnUnderMillions
22 Дек 2016 в 19:08
1
Нет, я хочу заменить de на немецкий
 – 
utdev
22 Дек 2016 в 19:10
Вы теперь знаете, сколько слов содержит в себе часть de?
 – 
JustOnUnderMillions
22 Дек 2016 в 19:11
В моем случае может быть только один, не волнуйтесь :)
 – 
utdev
22 Дек 2016 в 19:12

2 ответа

Лучший ответ

Вы можете использовать array_search как:

array_search('de', Config::get('constants.languages.names')) // returns German

Из документации

Ищет в массиве заданное значение и в случае успеха возвращает первый соответствующий ключ.

3
Amit Gupta 22 Дек 2016 в 19:24

Один путь в Рим.

public static function replaceName($string = '')
{
  $langName = Config::get('constants.languages.names');
  foreach($langName as $langKey => $langValue)
  {
    $search[]  = " $langValue ";
    $replace[] = " $langKey ";
  }
  return str_replace($search, $replace, $string);
}

Он заменяет только полные слова пробелами до и после него!

Мы не хотим, чтобы Ben становился BEnglish! ;) Если в этом нет необходимости, убираем пробелы.

############################################

Когда $string содержит только de, тогда:

public static function replaceName($string = '')
{
  $langName = array_flip(Config::get('constants.languages.names'));
  return isset($langName[$string])?$langName[$string]:$string;
}
0
JustOnUnderMillions 22 Дек 2016 в 19:23