Php 如何使用任意数量的单词获得单词列表的所有组合

Php 如何使用任意数量的单词获得单词列表的所有组合,php,math,permutation,combinations,Php,Math,Permutation,Combinations,我已搜索,但找不到与我的查询匹配的任何内容。我见过很多解决方案,其中人们需要使用所有选项的所有数字/单词组合,但没有一个像这样 下面是一个例子: apple pear 这将产生: 苹果 梨 苹果梨 梨苹果 甚至 apple pear banana 苹果 梨 香蕉 苹果梨 苹果香蕉 梨香蕉 … … 香蕉梨苹果 关键是,所有可能的组合,以任何顺序使用任何单词0或1次。:) 底部的最终答案 伪代码(尚未测试) 运行代码: 这将返回所有可能的组合 或者这个看起来更好: 或者,如果要查

我已搜索,但找不到与我的查询匹配的任何内容。我见过很多解决方案,其中人们需要使用所有选项的所有数字/单词组合,但没有一个像这样

下面是一个例子:

apple pear
这将产生:

苹果

苹果梨
梨苹果

甚至

apple pear banana
苹果

香蕉
苹果梨
苹果香蕉
梨香蕉


香蕉梨苹果


关键是,所有可能的组合,以任何顺序使用任何单词0或1次。:)

底部的最终答案


伪代码(尚未测试)


运行代码:


这将返回所有可能的组合


或者这个看起来更好:



或者,如果要查看平面关键点:


最后答覆: 这张单子列出了它们:


底部的最终答案


伪代码(尚未测试)


运行代码:


这将返回所有可能的组合


或者这个看起来更好:



或者,如果要查看平面关键点:


最后答覆: 这张单子列出了它们:


您可以下载这个类:

然后像这样使用它:

$combinatorics = new Math_Combinatorics;

$words_arr = array(
    'one'   => 'a',
    'two'   => 'b',
    'three' => 'c',
    'four'  => 'd',
    );

for ($i=count($words_arr)-1;$i>=1;$i--) {
    echo '<br><br>' . $i . ':<br>';
    $combinations_arr = $combinatorics->combinations($words_arr, $i);
    foreach ($combinations_arr as $combinations_arr_item) {
        echo implode(', ', $combinations_arr_item) . '<br>';
    }
}
$combinationics=新数学\u组合数学;
$words\u arr=数组(
“一”=>“一”,
“两个”=>“b”,
“三”=>“c”,
“四”=>“d”,
);
对于($i=count($words\u arr)-1;$i>=1;$i--){
回显“

”.$i.:
”; $combinations\u arr=$combinationics->combinations($words\u arr,$i); foreach($combines\u arr as$combines\u arr\u item){ 回波内爆(“,”,$combines_arr_item)。“
”; } }
您可以下载这个类:

然后像这样使用它:

$combinatorics = new Math_Combinatorics;

$words_arr = array(
    'one'   => 'a',
    'two'   => 'b',
    'three' => 'c',
    'four'  => 'd',
    );

for ($i=count($words_arr)-1;$i>=1;$i--) {
    echo '<br><br>' . $i . ':<br>';
    $combinations_arr = $combinatorics->combinations($words_arr, $i);
    foreach ($combinations_arr as $combinations_arr_item) {
        echo implode(', ', $combinations_arr_item) . '<br>';
    }
}
$combinationics=新数学\u组合数学;
$words\u arr=数组(
“一”=>“一”,
“两个”=>“b”,
“三”=>“c”,
“四”=>“d”,
);
对于($i=count($words\u arr)-1;$i>=1;$i--){
回显“

”.$i.:
”; $combinations\u arr=$combinationics->combinations($words\u arr,$i); foreach($combines\u arr as$combines\u arr\u item){ 回波内爆(“,”,$combines_arr_item)。“
”; } }
到目前为止,您有哪些代码?您想要的可能重复的代码在统计学上称为排列(与组合等相反)@user957593——我用一些工作代码更新了我的答案^^ ^在这种情况下,苹果是否有效?到目前为止,你有什么代码?你想要的可能重复的东西在统计学上称为排列(相对于组合等)@user957593--我用一些工作代码更新了我的答案^ ^在这种情况下是否有效?@Justin在答案底部看到了代码的更新。@Justin在答案底部看到了代码的更新。
<?php

$str = "apple pear banana orange";
$str_splode = explode(' ',$str);
print_r(showCombo(array(), $str_splode));

function showCombo($str_arr, $arr){
    $ret = array();
    foreach($arr as $val){
       if(!in_array($val, $str_arr)){
           $temp = $str_arr;
           $temp[] = $val;
           $ret[$val] = $temp;
           $ret[$val][] = showCombo($temp, $arr);
       }
    }
    return $ret;
}

?>
<?php

$str = "apple pear banana orange";
$str_splode = explode(' ',$str);
$combos = showCombo(array(), $str_splode);
foreach($combos as $key=>$array){
    echo $key.PHP_EOL;
    displayArrayByKey($key, $array);
}


function displayArrayByKey($str, $arr){
    foreach($arr as $key=>$array){
          $string = $str. " " . $key;
          echo $string . PHP_EOL; 
          if(count($array)> 0){
              displayArrayByKey($string, $array);
          }
    }
}

function showCombo($str_arr, $arr){
    $ret = array();
    foreach($arr as $val){
       if(!in_array($val, $str_arr)){
           $temp = $str_arr;
           $temp[] = $val;
           $ret[$val] = showCombo($temp, $arr);
       }
    }
    return $ret;
}

?>
$combinatorics = new Math_Combinatorics;

$words_arr = array(
    'one'   => 'a',
    'two'   => 'b',
    'three' => 'c',
    'four'  => 'd',
    );

for ($i=count($words_arr)-1;$i>=1;$i--) {
    echo '<br><br>' . $i . ':<br>';
    $combinations_arr = $combinatorics->combinations($words_arr, $i);
    foreach ($combinations_arr as $combinations_arr_item) {
        echo implode(', ', $combinations_arr_item) . '<br>';
    }
}