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循环不会替换变量的值[重复]