4

如何在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"
)

请帮忙,谢谢

4

3 回答 3

3

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);

那么你只需要担心内存:)

于 2014-04-05T12:29:58.020 回答
1

将字符串字符转换为数组,通过创建两个循环来创建所有可能的组合。

示例:此代码完美运行(经过测试)。

  <?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
    ?>
于 2013-06-06T07:39:08.383 回答
0

我对 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;
}
于 2014-06-27T11:31:07.070 回答