用其他数组中的值替换数组中的占位符
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);
【讨论】:
以上是关于用其他数组中的值替换数组中的占位符的主要内容,如果未能解决你的问题,请参考以下文章