php - 用 PHP 递归替换字符串

标签 php arrays recursion replace

对于我正在处理的项目,我有一个带占位符的基本 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/

相关文章:

php - CodeIgniter 迁移在本地运行但不在服务器上运行?

php - 简化php代码按列和排序结果从mysql数据库中选择数据

javascript - 按层次结构和名称对具有层次结构的对象数组进行排序

java - 无法从 Main 内部的嵌套循环更新 Main 中的数组。我该如何分配它的值?

c# - 合并两个集合,按属性递归组合重复项

php - 数据迁移到 CiviCRM - 保留遗留 ID

php - 如果键不存在/不真实,则通过键或假值从数组中获取值

python - 索引二维数组/列表

c - 为什么两个函数相互递归调用的 C 程序在 Linux 上会出现段错误?

Java文件权限问题