如何从 php 中的字符串创建可能的字符串组合?
Posted
技术标签:
【中文标题】如何从 php 中的字符串创建可能的字符串组合?【英文标题】:How to create possible combinations of strings from string in 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"
)
请帮忙,谢谢
【问题讨论】:
Generate all possible combinations using a set of strings 的可能重复项 【参考方案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;
【讨论】:
以上是关于如何从 php 中的字符串创建可能的字符串组合?的主要内容,如果未能解决你的问题,请参考以下文章
如何从PHP和Javascript中的字符串中删除所有空格[重复]