考虑每种可能性将数组循环到另一个数组

我想做的是......

我有一个名为 char 的数组和一个字符串

$char = array("-","_","|","+","~");
$MyString = "this is test string";

我想做的是用数组中的一个字符替换 $MyString 中的每个空格

但我希望结果是这样的

https://img1.mukewang.com/64fb2a7000019f0901790502.jpg

$MyString = "this is test string";

$ExplodedString = explode(" ",$MyString);


foreach ($char as $sinchar) {

        $text1 = preg_replace("/ /", $sinchar, $MyString ,1);

       foreach ($char as $sinchar) {

        $text2 = preg_replace("/ /", $sinchar, $text1 ,1);

        //echo $text2."\n";

            foreach ($char as $sinchar) {

                $text3 = preg_replace("/ /", $sinchar, $text2 ,1);

                echo $text3."\n";

            }

       }

}

这段代码对我来说工作得很好,但它是一个静态代码,我正在寻找更动态的东西,所以如果我添加一个具有更多空格的文本,我不必添加另一个循环。


那么大家有什么解决办法吗?


慕村225694
浏览 91回答 1
1回答

倚天杖

您可以使用递归函数,将第一个单词的排列与其余单词的所有可能排列组合起来:function computeAllPermutations(array $words, array $separators): array{  switch (count($words)) {    case 0:      return [];    case 1:      return [$words[0]];    default:      $permutations = [];      foreach (computeAllPermutations(array_slice($words, 1), $separators) as $subPermutation) {        foreach ($separators as $separator) {          $permutations[] = $words[0] . $separator . $subPermutation;        }      }      return $permutations;  }}用法:$words = preg_split('/\h+/', $MyString);$permutations = computeAllPermutations($words, $char);print_r($permutations);演示
打开App,查看更多内容
随时随地看视频慕课网APP