我正在尝试编写一个函数,用一个字符串中的字符替换它们的HTML实体编码等效函数。
我希望它能够遍历给定字符串的所有可能组合,例如:
因此,对于字符“abcd
”,它将返回:
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
等..........等等,直到没有其他组合
任何想法,或者有人看过我可以为此目的修改的某个功能?
答案 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");
?>