Php 带滤波器的置换发生器

Php 带滤波器的置换发生器,php,filter,generator,permutation,combinations,Php,Filter,Generator,Permutation,Combinations,我正在寻找能够生成以下内容的PHP想法/代码/算法: 我有5个字符字符串[a-zA-Z0-9] 我想使用变量过滤器生成置换 过滤器: 字符串是“W” 字符串是一个数字 字符串是“T” 字符串是大写的 字符串是“3” 编辑: <?php $reset = fopen('list.txt', 'w'); fclose($reset); $chars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234

我正在寻找能够生成以下内容的PHP想法/代码/算法:

我有5个字符字符串[a-zA-Z0-9]

我想使用变量过滤器生成置换

过滤器:

  • 字符串是“W”
  • 字符串是一个数字
  • 字符串是“T”
  • 字符串是大写的
  • 字符串是“3”

  • 编辑:

    <?php
    
    $reset = fopen('list.txt', 'w');
    fclose($reset);
    
    $chars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
    
    $file = fopen('list.txt', 'a+');
    
    foreach ($chars as $c0) {
        foreach ($chars as $c1) {
            foreach ($chars as $c2) {
                foreach ($chars as $c3) {
                    foreach ($chars as $c4) {
    
                        $filter = "/[a-z][a-z][a-z][a-z][A-Z]/";
                        $list = $c0 . $c1 . $c2 . $c3 . $c4;
    
                        if (preg_match($filter, $list)) {
                            $data = $list . "\n";
                            file_put_contents('list.txt', $data, FILE_APPEND);
                        } 
                    }
                }
            }
        }
    }
    fclose($file);
    ?>
    

    创建生成器,返回字符串中每个字符的可能值,而不是生成所有可能的排列,然后对其进行过滤。这将更加有效(仅仅是静态W将允许您将输入大小缩小一个非常大的因数)

    您可以通过将函数包装在一个简单的类中(以允许您保持内部状态)来创建生成器,并为每次迭代返回每个可能的标记。然后,通过组合对每个生成器的调用并创建可能的返回值来创建排列


    我还强烈建议您不要将file\u get\u内容和file\u put\u内容用于类似的内容。使用
    fopen
    打开文件,然后每次有新排列时执行
    fwrite()
    。生成所有排列后,调用
    fclose

    对于php,您可以下载此软件包:

    否,相同。与其遍历所有可能的值,不如遍历每个位置的有效值。