php foreach 替换数组中的值

Posted

技术标签:

【中文标题】php foreach 替换数组中的值【英文标题】:Php foreach replace values inside array 【发布时间】:2017-05-08 07:45:10 【问题描述】:

我尝试创建一个 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);

但它仍然没有任何想法?

【问题讨论】:

你想用'de'替换'German'?然后做return str_replace(array_keys( $langName), $langName, $string); 否则return str_replace($langName,array_keys( $langName), $string); 不,我想用德语替换 de 你现在有多少个单词有de 部分? 在我的情况下只有一个别担心:) 【参考方案1】:

您可以将array_search 用作:

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

来自docs

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

【讨论】:

【参考方案2】:

去罗马的一种方式。

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 foreach 替换数组中的值的主要内容,如果未能解决你的问题,请参考以下文章

为数组中的变量分配新值的forEach循环不会替换变量的值[重复]

for和foreace的区别

foreach与for的区别

php foreach 遍历细节探讨

PHP 想从1组二维数组里取1个下标的值去其他数组查询另1个下标的值,然后用查询出来值替换原来二维数组里的

用给定的索引替换php数组中的值