数组里面有多个值,但只需要匹配替换其中的几个,如何写效率点?

$arr = array(
  "a" => "1"
  "b" => "2"
  "c" => "3"
  "d" => "4"
  "e" => "5"
  "f" => "6"
);

$str = array(
    'xxxxx{a}xxxxx{b}xxxx{f}xxxx',
    'xxxxx{b}xxxxx{c}xxxx{d}xxxx',
    'xxxxx{a}xxxxx{d}xxxx{e}xxxx',
);

我自己想到的办法是


foreach($str as $v)
{
    foreach($arr as $ke=>$va)
    {
        $v = str_replace('{'.$ke.'}', $va, $v);
    }
    $newStr[] = $v;
}
return $newStr;

感觉这样每次都要把 $arr 全部遍历一遍不好...

大佬们可以帮忙指点一下吗...

阅读 2.6k
4 个回答
array_walk($str, function(&$v, $k) use ($arr){
    $v = strtr($v, $arr);
});

不想循环的话可以试下这样:

$arr = array(
  '{a}' => '1',
  '{b}' => "2",
  '{c}' => "3",
  '{d}' => "4",
  '{e}' => "5",
  '{f}' => "6",
);

$str = array(
    'xxxxx{a}xxxxx{b}xxxx{f}xxxx',
    'xxxxx{b}xxxxx{c}xxxx{d}xxxx',
    'xxxxx{a}xxxxx{d}xxxx{e}xxxx',
);

$newStr = implode('|||', $str);
$newStr = strtr($newStr, $arr);
$newStr = explode('|||', $newStr);
print_r($newStr);

另外提个tips: 纯字符串使用单引号比双引号效率会快那么一点点

不知道你要的是不是这个结果...

$result = array_map(function($item) use ($arr) {
    return str_replace(array_keys($arr), array_values($arr), $item);
}, $str);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题