【问题标题】: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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        • 2013-12-21
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 2015-05-28
        相关资源
        最近更新 更多