对于我正在处理的项目,我有一个带占位符的基本 URI,我想使用 PHP 从每个占位符的可能值数组中生成所有可能的组合。
更具体地说:
<?php
$uri = "foo/bar?foo=%foo%&bar=%bar%";
$placeholders = array(
'%foo%' => array('a', 'b'),
'%bar%' => array('c', 'd'),
// ...
);
我希望最终得到以下数组:
array(4) {
[0]=>
string(23) "foo/bar?foo=a&bar=c"
[1]=>
string(23) "foo/bar?foo=a&bar=d"
[2]=>
string(19) "foo/bar?foo=b&bar=c"
[3]=>
string(19) "foo/bar?foo=b&bar=d"
}
当然,更不用说我应该能够添加更多的占位符来生成更多的计算 uris,所以该解决方案应该递归地工作。
这些天我可能太累了,但我一直坚持简单地实现这一点,而且我确信有一种简单的方法,甚至可能使用内置的 PHP 函数......
提示?非常感谢任何帮助。
最佳答案
<?php
function rec($values,$keys,$index,$str,&$result)
{
if($index<count($values))
foreach($values[$index] as $val)
rec($values,$keys,$index+1,$str.substr($keys[$index],1,strlen($keys[$index])-2)."=".$val."&",$result);
else
$result[count($result)] = $str;
}
// Now for test
$placeholders = array(
'%foo%' => array('a', 'b'),
'%bar%' => array('c', 'd' , 'h'),
);
$xvalues = array_values($placeholders) ;
$xkeys = array_keys($placeholders) ;
$result = array();
rec($xvalues,$xkeys,0,"",$result); // calling the recursive function
print_r($result);
// the result will be:
Array (
[0] => foo=a&bar=c&
[1] => foo=a&bar=d&
[2] => foo=a&bar=h&
[3] => foo=b&bar=c&
[4] => foo=b&bar=d&
[5] => foo=b&bar=h&
)
?>
它处理无限数量的占位符和无限数量的值
关于php - 用 PHP 递归替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172020/