如何从 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 中的字符串创建可能的字符串组合?的主要内容,如果未能解决你的问题,请参考以下文章

ruby - 如何从字符串数组中生成可能的字母顺序组合?

PHP算法从单个集合中生成特定大小的所有组合

如何从PHP和Javascript中的字符串中删除所有空格[重复]

获取字符串或组合的所有可能排列,包括 Java 中的重复字符

excel 如何提取某个字后面的几个文字?

php当中,如何将数组合并成变量呢?