为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
holdtom 2019-03-18 08:28:19
$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 全部遍历一遍不好... 大佬们可以帮忙指点一下吗...
查看完整描述

4 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

多看文档
str_replace

https://img1.sycdn.imooc.com//5c8f47100001e65408000450.jpg

查看完整回答
反对 回复 2019-03-18
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

array_walk($str, function(&$v, $k) use ($arr){
    $v = strtr($v, $arr);
});
查看完整回答
反对 回复 2019-03-18
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

$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: 纯字符串使用单引号比双引号效率会快那么一点点

查看完整回答
反对 回复 2019-03-18
?
噜噜哒

TA贡献1784条经验 获得超7个赞

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

$result = array_map(function($item) use ($arr) {
    return str_replace(array_keys($arr), array_values($arr), $item);
}, $str);
查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 384 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信