打印所有可能的条件组合吗?

时间:2018-10-07 10:33:45

标签: php function combinations

我有这些变量:

$letters = array('a','b','c','1','2','3', .....);
$min_length = any number ;
$max_length = any number;
$must_include = array('letter1','letter2', .....); // list of letters and numbers that must be in combination
$must_exclude = array('letter3','letter3', .....); // list of letters and numbers that must not be in combination

我需要一个函数来根据给定的变量打印所有可能的组合。

我如何完成此任务?

1 个答案:

答案 0 :(得分:-1)

可以使用php的array_*函数解决此孤立的问题。

  1. 首先,让我们定义变量:

    $letters = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
    $min_length = 5;
    $max_length = 15;
    $must_include = array('a','e', 't', '7');
    $must_exclude = array('4','q', 'j', '9');
    
  2. 对于更简单的解决方案,让我们基于$min_length$max_length值将固定长度的结果定义为变量:

    $actual_length = rand($min_length, $max_length);
    
  3. 下一步,我们将其删除and,以准备干净的字母:

    $clean_letters = array_diff($letters, $must_exclude);
    $clean_letters = array_diff($letters, $must_include);
    
      

    请注意,我删除$must_include$must_exclude的原因是,由于下面将包含$must_include,因此必须将其包括在内。

  4. 现在,获取实际结果:

    $result = $must_include;
    $result = array_merge($result, array_rand($letters, $actual_length - sizeof($result)));
    
      

    在此步骤中,我默认将$result设为$must_include,然后将其与$letters的随机值合并为$actual_length的大小减去{ {1}}的大小。

以上所有步骤都将导致在$must_include中始终带有字母的值,并省略$must_include的字母。

下面的完整脚本:

$must_exclude