PHP函数通过字符串循环并替换所有可能组合的字符

时间:2011-05-20 15:31:43

标签: php

我正在尝试编写一个函数,用一个字符串中的字符替换它们的HTML实体编码等效函数。

我希望它能够遍历给定字符串的所有可能组合,例如:

  • 一个接一个地
  • 然后组合,即每次2个,然后一次三个,直到你一次得到长度
  • 然后以组合分割开始,即......第一个和最后一个,然后是第一个和第二个到最后一个
  • 然后是第一个和最后两个,第一个和第二个/第三个

因此,对于字符“abcd”,它将返回:

abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd

等..........等等,直到没有其他组合

任何想法,或者有人看过我可以为此目的修改的某个功能?

3 个答案:

答案 0 :(得分:3)

循环从0到2 ^长度 - 1.在每一步,如果循环计数器的第N位为1,则编码第N个字符

$str = 'abcd';

$len = strlen($str);

for($i = 0; $i < 1 << $len; $i++) {
    $p = '';
    for($j = 0; $j < $len; $j++)
        $p .= ($i & 1 << $j) ? '&#' . ord($str[$j]) . ';' : $str[$j];
    echo $p, "\n";
}

答案 1 :(得分:1)

2^n种组合,因此速度非常快。只有符合PHP的整数大小,此解决方案才有效。但真正关心谁?一个很大的字符串会打印出如此多的结果,你将花费你的整个生命来看待它们。

<?php
$input = 'abcd';

$len = strlen($input);
$stop = pow(2, $len);

for ($i = 0; $i < $stop; ++$i)
{
  for ($m = 1, $j = 0; $j < $len; ++$j, $m <<= 1)
  {
    echo ($i & $m) ? '&#'.ord($input[$j]).';' : $input[$j];
  }
  echo "\n";
}

答案 2 :(得分:0)

this怎么样?

<?php
function permutations($str, $n = 0, $prefix = "") {
   if ($n == strlen($str)) {
      echo "$prefix\n";
      return;
   }

   permutations($str, $n + 1, $prefix . $str[$n]);
   permutations($str, $n + 1, $prefix . '&#' . ord($str[$n]) . ';');
}

permutations("abcd");
?>