我搜索过,但找不到符合我查询的内容。我已经看到很多解决方案,人们想要使用所有选项的数字/单词的所有组合,但没有这样的...
以下是一个例子:
apple pear
这应该产生:
苹果
梨
苹果梨 梨苹果
甚至......
apple pear banana
苹果
梨
香蕉
苹果梨 苹果香蕉 梨香蕉 ...
...
香蕉梨苹果
关键是,所有可能的组合,以任何顺序使用任何单词零次或一次。 :)
答案 0 :(得分:3)
底部的最终答案
伪代码(尚未经过测试)
$str = "apple pear banana";
$str_splode = explode(' ',$str);
echo showCombo($str_splode[0], $str_splode);
function showCombo($str, $arr){
$ret = '';
foreach($arr as $val){
if($val != $str)
$ret .= $str.showCombo($val, $arr);
}
return $ret;
}
正在运行代码:http://codepad.org/IUPJbhI7
<?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;
print_r($temp);
$comb = showCombo($temp, $arr);
if(count($comb) > 0)
$ret[] = $comb;
}
}
return $ret;
}
?>
这会返回所有可能的组合
或者这个看起来更好:http://codepad.org/KCLeRUYs
<?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;
}
?>
或者,如果您想查看平键:http://codepad.org/95aNQzXB
这一个列出了所有内容:http://codepad.org/vndOI9Yj
<?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;
}
?>
答案 1 :(得分:1)
您可以下载此课程:http://pear.php.net/package/Math_Combinatorics
并使用它:
$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>';
}
}