Php foreach替换数组内的值

时间:2016-12-22 16:06:07

标签: php arrays laravel loops replace

我尝试创建一个Helper函数,该函数将短语替换为全名。

我有一个常量文件,看起来像这样(使用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 个答案:

答案 0 :(得分:3)

您可以使用array_search作为:

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

来自docs

  

在数组中搜索给定值,如果成功则返回第一个相应的键。

答案 1 :(得分:0)

罗马的一种方式。

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! ;)如果不需要,请删除空格。

############################################## < / p>

$string仅有de作为内容时,则:

public static function replaceName($string = '')
{
  $langName = array_flip(Config::get('constants.languages.names'));
  return isset($langName[$string])?$langName[$string]:$string;
}