你能告诉如何用 preg-replace 替换字符串(需要正则表达式):
/user/{parent_id}/{action}/step/1
在数组的等效值处:
array('parent_id'=>32, 'action'=>'some');
制作:
/user/32/some/step/1
添加
这是一个典型的问题,所以我可能不会知道变量的名称是什么来的
你能告诉如何用 preg-replace 替换字符串(需要正则表达式):
/user/{parent_id}/{action}/step/1
在数组的等效值处:
array('parent_id'=>32, 'action'=>'some');
制作:
/user/32/some/step/1
这是一个典型的问题,所以我可能不会知道变量的名称是什么来的
您可以使用str_replace
例如:
str_replace(array("{parent_id}", "{action}"), array(32, 'some'), "/user/{parent_id}/{action}/step/1");
$arr = array('parent_id'=>32, 'action'=>'some');
$out = str_replace(array_keys($arr),array_values($arr),$in);
不需要正则表达式!
假设你有:
$arr = array('parent_id'=>32, 'action'=>'some');
$in = '/usr/{parent_id}/{action}/step/1';
这将替换大括号:
function bracelize($str) {
return '{' . $str . '}';
}
$search = array_map('bracelize', array_keys($arr));
$out = str_replace($search, $arr, $in);
或者,如果您使用的是 PHP >= 5.3,您可以使用 lambda:
$search = array_map(function ($v) { return '{'.$v.'}';}, array_keys($arr));
$out = str_replace($search, $arr, $in);
$s = '/user/{parent_id}/{action}/step/1';
$replacement = array('parent_id'=>32, 'action'=>'some');
$res = preg_replace(array('/\\{parent_id\\}/', '/\\{action\\}/'), $replacement, $s);
当然,您也可以使用str_replace
(事实上,您应该使用)。
<?php
$string = '/usr/{parent_id}/{action}/step/1';
$pattern = array('#{parent_id}#', '#{action}#');
$values = array('32', 'some');
echo preg_replace($pattern, $values, $string);
?>
如果您的问题没有比这更复杂,我建议您将 preg_replace 更改为 str_replace。
编辑:我看到你事先不知道变量名。在这种情况下,你可以做这样的事情。
<?php
function wrap_in_brackets(&$item)
{
$item = '{' . $item . '}';
return true;
}
$string = '/usr/{parent_id}/{action}/step/1';
$variables = array('parent_id' => 32, 'action' => 'some');
$keys = array_keys($variables);
array_walk($keys, 'wrap_in_brackets');
echo str_replace($keys, array_values($variables), $string);
?>
扩展 mvds 的答案:
$in = 'user/{parent_id}/{action}/step/1';
$arr = array('{parent_id}' => 32, '{action}' => 'some');
$out = str_replace(array_keys($arr), $arr, $in);
或者:
$in = 'user/{parent_id}/{action}/step/1';
$arr = array('parent_id' => 32, 'action' => 'some');
$arr[] = '';
$find = array_merge(array_keys($arr), array('{', '}'));
$out = str_replace($find, $arr, $in);