6

我有 2 个数组,一个带有占位符,它们是另一个数组中的键

arr1 = array(
    "id"       => "{{verticalId}}",
    "itemPath" => "{{verticalId}}/{{pathId}}/");

arr2 = array(
        "verticalId" => "value1",
        "pathId"     => "value2");

那么我怎样才能运行arr1并用来自的值替换占位符arr2呢?

4

3 回答 3

5
foreach ($arr1 as $key => &$value) {
    $value = preg_replace_callback('/\{\{(.*?)\}\}/', function($match) use ($arr2) {
        return $arr2[$match[1]];
    }, $value);
}
于 2013-07-30T11:58:54.090 回答
0

当然,这是一种方法。不过它需要一点爱,而且 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
);
于 2013-07-30T12:00:39.480 回答
0
  • 在@Barmar 的答案中循环目标数组不是(也不是在 2013 年)。允许将数组作为preg_replace_callback()函数的 $subject 。

  • 从 PHP 7.4 开始,您可以使用自动访问父作用域的箭头函数形式。

  • 您不需要转义模式中的大括号。仅当括号内容是精确数字时,才需要转义最后一个左括号,例如{\{300}}

  • 我一般不建议.*使用正则表达式,但我会想出一个规则,里面{{ }}的字符只允许\w+

最新答案:

$arr1 = preg_replace('/{{\w+}}/', fn($m) => $arr2[$m[1]], $arr1);
于 2021-10-15T22:59:43.900 回答