Я пытаюсь создать вспомогательную функцию, которая заменяет короткие названия языков их полными именами.
У меня есть файл констант, который выглядит так (с использованием 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 ответа
Вы можете использовать array_search
как:
array_search('de', Config::get('constants.languages.names')) // returns German
Из документации
Ищет в массиве заданное значение и в случае успеха возвращает первый соответствующий ключ.
Один путь в Рим.
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;
}
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
return str_replace(array_keys( $langName), $langName, $string);
ещеreturn str_replace($langName,array_keys( $langName), $string);
de
?