【发布时间】:2015-08-25 08:08:23
【问题描述】:
我有一个 JavaScript 函数(不是纯 JavaScript)
function formatString () {
var args = jQuery.makeArray(arguments).reverse();
var str = args.pop();
return str.replace(/{\d\d*}/g, function () {
return args.pop();
});
}
我用来格式化字符串,例如
formatString("{0} and {1}", "first", "second");
返回"first and second"
我想在 php 中复制相同的功能,我有以下功能:
function formatString() {
if(func_num_args() > 1) {
$args = array_reverse(func_get_args());
$input = array_pop($args);
}
return preg_replace_callback('/{\d\d*}/', function() use ($args) {
return array_pop($args);
}, $input);
}
但是,在这种情况下formatString("{0} and {1}", "first", "second");
返回"first and first"
与每次匹配都执行回调的 JavaScript 版本的函数不同,php 变体似乎只执行一次回调。
我正在考虑对 formatString 进行递归调用作为回调,但由于 preg_replace_callback 使用其自己的参数调用回调(此处为匹配数组),因此我在递归方面遇到了挑战。
请告知如何最好地利用回调或任何替代解决方案来使用preg_replace_callback。全局变量的使用是不可能的。
【问题讨论】:
标签: javascript php jquery