我有两个数组,其中一个带有占位符,它们是另一个数组中的键
arr1 = array(
"id" => "{{verticalId}}",
"itemPath" => "{{verticalId}}/{{pathId}}/");
arr2 = array(
"verticalId" => "value1",
"pathId" => "value2");
那么,我如何在arr1
上运行并用arr2
中的值替换占位符呢?
foreach ($arr1 as $key => &$value) {
$value = preg_replace_callback('/'{'{(.*?)'}'}/', function($match) use ($arr2) {
return $arr2[$match[1]];
}, $value);
}
当然,这里有一种方法。不过它需要一点爱,还有PHP 5.3+
<?php
$subject = array(
'id' => '{{product-id}}'
);
$values = array(
'product-id' => 1
);
array_walk($subject, function( & $item) use ($values) {
foreach($values as $template => $value) {
$item = str_replace(
sprintf('{{%s}}', $template),
$value,
$item
);
}
});
var_dump(
$subject
);
-
在@Barmar的回答中,没有必要(2013年也没有)循环目标数组。允许将数组作为
preg_replace_callback()
函数的$subject。 -
从PHP 7.4开始,您可以使用箭头函数表单,该表单可以自动访问父作用域。
-
您不需要转义模式中的花括号。如果括号内容是一个精确的数字,如
{'{300}}
,则只需要转义最后一个左括号 -
我通常不建议在正则表达式中使用
.*
,但我只会提出一个规则,即{{ }}
中的字符只能是'w+
最新答案:
$arr1 = preg_replace('/{{'w+}}/', fn($m) => $arr2[$m[1]], $arr1);