用其他数组中的值替换数组中的占位符

Posted

技术标签:

【中文标题】用其他数组中的值替换数组中的占位符【英文标题】:Replace placeholders in array with values from other array 【发布时间】:2013-07-30 13:26:43 【问题描述】:

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

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

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

那么我如何在 arr1 上运行并将占位符替换为来自 arr2 的值?

【问题讨论】:

【参考方案1】:
foreach ($arr1 as $key => &$value) 
    $value = preg_replace_callback('/\\(.*?)\\/', function($match) use ($arr2) 
        return $arr2[$match[1]];
    , $value);

【讨论】:

【参考方案2】:

当然,这是一种方法。不过它需要一点爱,还有 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
);

【讨论】:

【参考方案3】:

在@Barmar 的答案中循环目标数组不是(也不是在 2013 年)。数组可以作为preg_replace_callback() 函数的$subject。

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

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

我一般不建议在正则表达式中使用.*,但我会想出一个规则,即 中的字符只能是\w+

最新答案:

$arr1 = preg_replace('/\w+/', fn($m) => $arr2[$m[1]], $arr1);

【讨论】:

以上是关于用其他数组中的值替换数组中的占位符的主要内容,如果未能解决你的问题,请参考以下文章

用映射字典的值替换嵌套字典中的占位符

Gherkin 语法中的数组占位符

如何将 R 会话中的值替换为 SQL 绑定变量占位符?

具有许多占位符的 ItemStack

jQuery专注于数组模糊

java中属性中的动态占位符替换