Php 获取字符串的所有可能组合(前缀/后缀)

Php 获取字符串的所有可能组合(前缀/后缀),php,Php,我正在尝试编写一个函数,它将让我们说“hey there”,然后创建一个包含该字符串所有前缀的数组。所以它会返回“h”,“he”,“hey”,“hey”,“t”等等 然后,我希望使用相同的函数创建第二个包含所有后缀的数组(倒数计算字符串)。因此,对于同一个字符串,它将返回“e”、“er”、“ere”、“ereh”、“ereht”、“ereht”等 我正在努力弄清楚这一点,但我已经设法得到了下面的结果,它得到了一个字符串的所有可能的组合,我只需要让它按顺序来做 $str = "hey the

我正在尝试编写一个函数,它将让我们说“hey there”,然后创建一个包含该字符串所有前缀的数组。所以它会返回“h”,“he”,“hey”,“hey”,“t”等等

然后,我希望使用相同的函数创建第二个包含所有后缀的数组(倒数计算字符串)。因此,对于同一个字符串,它将返回“e”、“er”、“ere”、“ereh”、“ereht”、“ereht”等

我正在努力弄清楚这一点,但我已经设法得到了下面的结果,它得到了一个字符串的所有可能的组合,我只需要让它按顺序来做

$str    = "hey there";

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;
}   

permute($str,0,strlen($str)); // call the function.

}
$str=“你好”;
函数排列($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,0,strlen($str));//调用函数。
}

非常感谢您的帮助。

一个简单的for循环和几个substr也能做到这一点吗

$prefixes = array();
$suffixes = array();
$str = "hey there";
$l = strlen($str);
for($i=1; $i<$l; $i++) {
  $prefixes[] = substr($str, 0, $i);
  $suffixes[] = strrev(substr($str, $l-$i, $i));
}
$prefixes=array();
$后缀=数组();
$str=“你好”;
$l=strlen($str);

对于($i=1;$i来说,这就是你想要做的吗

<?php
    function getPrefixSuffix($string, &$prefixes = array(), &$suffixes = array()) {
        $stringLength = strlen($string);
        for ($i = 1; $i < $stringLength; $i++) {
            $prefixes[] = substr($string, 0, $i);
        }
        for ($i = $stringLength - 1; $i >= 1; $i--) {
            $suffixes[] = strrev(substr($string, $i));
        }
    }

    getPrefixSuffix("hey there", $prefixes, $suffixes);

    print_r($prefixes);
    /*
        Array
        (
            [0] => h
            [1] => he
            [2] => hey
            [3] => hey 
            [4] => hey t
            [5] => hey th
            [6] => hey the
            [7] => hey ther
        )
    */

    print_r($suffixes);
    /*
        Array
        (
            [0] => e
            [1] => er
            [2] => ere
            [3] => ereh
            [4] => ereht
            [5] => ereht 
            [6] => ereht y
            [7] => ereht ye
        )
    */
?>


这应该可以。我编写了3个函数。第一个函数通过在每次追加时打印来获取所有前缀。第三个是您编写的交换方法。第二个函数只是向后交换字符串,然后调用getPrefix。请注意,原始字符串保持不变

$str = "hey there"

function getPrefix($str)
{
    $printString = "";
    for ($i = 0; $i < strlen($str); $i++)
    {
        $printString .= $str[$i];
        print ($printString);
    }
}

function getBackwards($str)
{
    if (strlen($str) % 2 == 0)
    {
        for ($i = 0; $i < strlen($str)/2; $i++)
            swap ($str, $i, strlen($str)-1-$i);
    }
    else
    {
        for ($i = 0; $i < (strlen($str)-1)/2; $i++)
            swap ($str, $i, strlen($str)-1-$i);
    }
    getPrefix($str);
}

function swap(&$str,$i,$j)
{
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}
$str=“你好”
函数getPrefix($str)
{
$printString=“”;
对于($i=0;$i
substr、strrev和循环的组合就可以了。不是重复的,我不想生成文章中所述的所有组合。请在评论之前阅读,我会检查这些函数,谢谢。几乎不值得回答:
function permute($string){$length=strlen($string);$result=array();对于($i=1;$i做了这个工作标记)更有趣的是使用尝试来做它,至少它学习了一些关于数据结构的有用的东西,以及将
strev
添加到
$subfixes
,因为OP希望它作为
ereht
而不是
那里