Php 如何从字符串中获取具有所需长度的所有排列?

Php 如何从字符串中获取具有所需长度的所有排列?,php,arrays,string,function,permutation,Php,Arrays,String,Function,Permutation,我有一个函数,在这个函数中,我可以传递一个字符串和一个所需的长度,以从字符串的字符中获得所有具有固定长度的排列 但是现在我想要整个单词的排列,例如 $source = "apple,potatoes,orange"; 遗憾的是,此函数只提供字符排列,而不是整个单词,我不知道如何修改代码,因此我将从上述示例数据中获得这些排列: apple,apple apple,potatoes apple,orange potatoes,apple potatoes,potatoes potatoes,ora

我有一个函数,在这个函数中,我可以传递一个字符串和一个所需的长度,以从字符串的字符中获得所有具有固定长度的排列

但是现在我想要整个单词的排列,例如

$source = "apple,potatoes,orange";
遗憾的是,此函数只提供字符排列,而不是整个单词,我不知道如何修改代码,因此我将从上述示例数据中获得这些排列:

apple,apple
apple,potatoes
apple,orange
potatoes,apple
potatoes,potatoes
potatoes,orange
//...
代码:

<?php 

$source = 'AaBbCcDdEe'; 

foreach(combos_with_repetition($source, 2) as $combo) { 
    echo "$combo<br>\n"; 
} 

function combos_with_repetition($input, $combo_len = 2) 
{ 
    for($i = 0; $i < $combo_len; ++$i) 
    { 
        @$part1 .= 'for($k'.$i.' = 0, $len = strlen($input); $k'.$i.' < $len; ++$k'.$i.') '; 
        @$part2 .= ($i?'.':'') . '$input[$k'.$i.']'; 
    } 
    eval($part1.'$rtn[] = '.$part2.';'); 
    return $rtn; 
} 

?>


因此,任何有关如何修改代码的帮助或提示都会有所帮助。

这将为您完成以下工作:

function test($source){
    $source_array = explode(',',$source);
    $result = '';
   foreach($source_array as $item)
   {
       foreach($source_array as $item2){
            $result .= $item.','.$item2.'<br>';
       }
   }
return $result;
}

 $source="apple,patatoes,orange";
 echo test($source);
功能测试($source){
$source_数组=分解(',',$source);
$result='';
foreach($source\u数组作为$item)
{
foreach($source_数组作为$item2){
$result.=$item.,'.$item2.
'; } } 返回$result; } $source=“苹果、帕塔托斯、橙色”; 回声测试(来源);
这将为您完成以下任务:

function test($source){
    $source_array = explode(',',$source);
    $result = '';
   foreach($source_array as $item)
   {
       foreach($source_array as $item2){
            $result .= $item.','.$item2.'<br>';
       }
   }
return $result;
}

 $source="apple,patatoes,orange";
 echo test($source);
功能测试($source){
$source_数组=分解(',',$source);
$result='';
foreach($source\u数组作为$item)
{
foreach($source_数组作为$item2){
$result.=$item.,'.$item2.
'; } } 返回$result; } $source=“苹果、帕塔托斯、橙色”; 回声测试(来源);
这应该适合您,即使没有
邪恶()

那么这段代码是做什么的呢

1.有多少种排列? 非常简单:

nl=置换量

其中,
n
是字数,
l
是每个组合所需的长度

因此,对于这个特定的示例,有3个单词(
apple
patatoes
orange
),我们希望每个排列的长度为3。指:

33=27个排列

2.将所有排列组合在一起 我们循环遍历我们已经拥有的所有置换(从一个置换开始,一个“空置换”(
$permutations=[[]];
)开始),对于每个置换,我们遍历我们的数据数组,并将每个置换与每个输入数据组合成一个新的置换

现在我们这样做,直到得到每个排列所需的长度

2.1示例

Input data:

[1, 2]     //Input array with the data
length = 2 //Desired length for each permutation
正如你在上面的例子中所看到的,我们现在有了我们想要的所有长度的排列,这里是2

但是,为了只获得具有所需长度的排列,我们在每次迭代中都覆盖结果数组,因此在最后,结果数组中只有具有所需长度的排列

3.代码:
这应该适合您,即使没有
evil()

那么这段代码是做什么的呢

1.有多少种排列? 非常简单:

nl=置换量

其中,
n
是字数,
l
是每个组合所需的长度

因此,对于这个特定的示例,有3个单词(
apple
patatoes
orange
),我们希望每个排列的长度为3。指:

33=27个排列

2.将所有排列组合在一起 我们循环遍历我们已经拥有的所有置换(从一个置换开始,一个“空置换”(
$permutations=[[]];
)开始),对于每个置换,我们遍历我们的数据数组,并将每个置换与每个输入数据组合成一个新的置换

现在我们这样做,直到得到每个排列所需的长度

2.1示例

Input data:

[1, 2]     //Input array with the data
length = 2 //Desired length for each permutation
正如你在上面的例子中所看到的,我们现在有了我们想要的所有长度的排列,这里是2

但是,为了只获得具有所需长度的排列,我们在每次迭代中都覆盖结果数组,因此在最后,结果数组中只有具有所需长度的排列

3.代码:

输入是指输入还是输出?嗨,我是指输入。我想获得所有单词的组合,而不是字母的组合。那么你真的要求太多了,你要求我们重写你的函数,所以这是离题的。你认为我需要更改所有函数吗?put,你是指输入还是输出?嗨,我是指输入。我想获得所有单词的组合,而不是字母的组合。那么你真的要求太多了,你要求我们重写你的函数,所以这是离题的。你认为我需要更改所有函数吗?谢谢你的帮助Opetmar!我很高兴它帮了你的忙。。不客气:)@FredericMuller这不是一个非常灵活的答案。FredericMuller这取决于你,但我认为你必须接受@Rizier123答案。它比我的答案更好、更详细、更灵活。谢谢你的帮助Opetmar!我很高兴它帮了你的忙。。不客气:)@FredericMuller这不是一个非常灵活的答案。FredericMuller这取决于你,但我认为你必须接受@Rizier123答案。它比我的答案更好、更详细、更灵活。谢谢你回答Rizier123!谢谢你的回答!
Array
(
    [0] => Array
        (
            [0] => apple
            [1] => apple
            [2] => apple
        )
    //...
    [26] => Array
        (
            [0] => orange
            [1] => orange
            [2] => orange
        )

)