【问题标题】:How to create possible combinations of strings from string in php?如何从 php 中的字符串创建可能的字符串组合?
【发布时间】:2013-06-02 02:24:56
【问题描述】:
如何从 php 中的字符串创建可能的字符串组合
经验:
input = 'abc';
output = array(
[0]=> "a"
[1]=> "ab"
[2]=> "abc"
[3]=> "ac"
[4]=> "acb"
[5]=> "b"
[6]=> "ba"
[7]=> "bac"
[8]=> "bc"
[9]=> "bca"
[10]=> "c"
[11]=> "ca"
[12]=> "cab"
[13]=> "cb"
[14]=> "cba"
)
请帮忙,谢谢
【问题讨论】:
标签:
php
string
combinations
【解决方案1】:
Fasil kk 的代码可能会遇到“最大函数嵌套级别”致命错误,
如果你有这个问题,试试这个:
$letters = str_split("abc");
$combos = $letters;
$lastres = $letters;
for ($i = 1; $i < count($letters); $i++) {
$newres = array();
foreach ($lastres as $r) {
foreach ($letters as $let) {
$newres[] = $r . $let;
}
}
foreach ($newres as $w) {
$combos[] = $w;
}
$lastres = $newres;
}
print_r($combos);
那么你只需要担心内存:)
【解决方案2】:
将字符串字符转换为数组,通过创建两个循环来创建所有可能的组合。
示例:此代码完美运行(经过测试)。
<?PHP
function create_possible_arrays(&$set, &$results)
{
for ($i = 0; $i < count($set); $i++)
{
$results[] = $set[$i];
$tempset = $set;
array_splice($tempset, $i, 1);
$tempresults = array();
create_possible_arrays($tempset, $tempresults);
foreach ($tempresults as $res)
{
$results[] = $set[$i] . $res;
}
}
}
$results = array();
$str = 'abc'; //your string
$str = str_split($str); //converted to array
create_possible_arrays($str, $results);
print_r($results); //displaying all results
?>
【解决方案3】:
Axxe 没问题(谢谢),但您必须从组合数组中删除重复值。
我提出这个功能:
function create_possible_arrays($string) {
$letters = str_split($string);
$combos = array_unique($letters);
$lastres = $letters;
for ($i = 1; $i < count($letters); $i++) {
$newres = array();
foreach ($lastres as $r) {
foreach ($letters as $let) {
$new = $r . $let;
if (!in_array($new, $newres)) {
$newres[] = $new;
// Action
$combos[] = $new;
}
}
}
$lastres = $newres;
}
return $combos;
}