php可用选项

php可用选项,php,algorithm,Php,Algorithm,可能重复: 我想用php编写一个脚本,它将接受以下输入: 12a 并输出如下结果: 1, 2, a, 12, 1a, 21, 2a, a1, a2, 12a, 1a2, 21a, 2a1. 我做了一些研究,但我找不到任何脚本可以做到这一点。这并不完美,因为您的输出集没有很好的定义。首先,找出您的输出集应该是什么样子,然后使用下面的方法开始 <?php $input = "12a"; $input_array = str_split($input, 1);//get an array

可能重复:

我想用php编写一个脚本,它将接受以下输入:

12a
并输出如下结果:

1, 2, a, 12, 1a, 21, 2a, a1, a2, 12a, 1a2, 21a, 2a1.

我做了一些研究,但我找不到任何脚本可以做到这一点。

这并不完美,因为您的输出集没有很好的定义。首先,找出您的输出集应该是什么样子,然后使用下面的方法开始

<?php

$input = "12a";
$input_array = str_split($input, 1);//get an array of each individual character

$max_length = strlen($input);
$length = 01;
$result = array();

foreach($input_array as $character) {
  $result[] = $character;
}

while ($length < $max_length){
  foreach($result as $substring) {
    foreach($input_array as $character) {
      $result[] = $substring.$character;
    }
  }
  $length++;
}

foreach ($result as $result_string) {
  echo $result_string.", ";
}

这是一个来自answer的修改函数

函数排列($str,$i,$n){
如果($i==$n)
打印“$str\n”;
否则{
对于($j=$i;$j<$n;$j++){
掉期($str,$i,$j);
排列($str,$i+1,$n);
交换($str,$i,$j);//回溯。
}
}
}
//函数在$str的$i和$j位置交换字符。
函数交换(&$str,$i,$j){
$temp=$str[$i];
$str[$i]=$str[$j];
$str[$j]=$temp;
}   
$str=“12a”;
$len=strlen($str);

对于($i=0;$i您给出的结果没有遵循任何明显的模式。起初,它似乎给出了输入字符串重新排列的所有可能的子字符串,但它缺少
a12
a21
。它应该被关联到算法。因此可能的重复性也看到了这一点,所以,首先搜索!这就是您要做的事情uld首先自己尝试,imo-请记住,有些问题没有“脚本”,您可以直接插入。一种算法是:列出长度为1的所有排列(简单)。然后列出长度为2的所有排列-要做到这一点,请依次使用每个字母并添加一个剩余字母(对于所有剩余字母).等等等等-这是非常普遍的。如果你尝试一下,有人会帮助你。你是在尝试创建一个野蛮的脚本吗?它看起来确实是这样的:P@Starx:哈哈,要么是那个,要么是作业。这个很好用!非常感谢你,我只是想知道如何才能得到高达128位的结果?找到它了吗?因为脚本Starx已经开始了od解决方案。一定要选择一个被接受的答案,并投票选出对你有帮助的答案。@事实上,哈哈,我不知道,但肯定不再有了。
function permute($str,$i,$n) {
   if ($i == $n)
       print "$str\n";
   else {
        for ($j = $i; $j < $n; $j++) {
          swap($str,$i,$j);
          permute($str, $i+1, $n);
          swap($str,$i,$j); // backtrack.
       }
   }
}

// function to swap the char at pos $i and $j of $str.
function swap(&$str,$i,$j) {
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}   

$str = "12a";
$len = strlen($str);
for($i =0; $i <= $len; $i++) {
   permute($str,0,$i + 1); // call the function.
}