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

$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 全部遍历一遍不好...

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

holdtom
浏览 385回答 4
4回答

尚方宝剑之说

多看文档str_replace

米琪卡哇伊

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);
打开App,查看更多内容
随时随地看视频慕课网APP