Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何生成由4个数字和2个A-Z字符组成的每个模式组合_Php_Loops_Combinations - Fatal编程技术网

Php 如何生成由4个数字和2个A-Z字符组成的每个模式组合

Php 如何生成由4个数字和2个A-Z字符组成的每个模式组合,php,loops,combinations,Php,Loops,Combinations,我写了一个小脚本与一个朋友提供的数据库进行对话,这样我就可以将荷兰邮政编码与街道名称联系起来。但是我想自己做 邮政编码是像NNNNCC一样构建的,其中N是一个数字0-9(不可能忽略第一个0的0000-0999),并且C=字符a-Z 如何在PHP中生成所有可能的组合?简单的foreach嵌套循环如下: foreach(range(1000,9999) as $num) foreach(range('A', 'Z') as $c1) foreach(range('A', '

我写了一个小脚本与一个朋友提供的数据库进行对话,这样我就可以将荷兰邮政编码与街道名称联系起来。但是我想自己做

邮政编码是像
NNNNCC
一样构建的,其中
N
是一个数字0-9(不可能忽略第一个0的0000-0999),并且
C
=字符a-Z


如何在
PHP
中生成所有可能的组合?

简单的foreach嵌套循环如下:

foreach(range(1000,9999) as $num)
    foreach(range('A', 'Z') as $c1) 
        foreach(range('A', 'Z') as $c2)
            $res[] = $num . $c1 . $c2; 

如果出现语法错误,我不在计算机上,非常抱歉(您可能需要将
$num
转换为字符串,但我想PHP会处理它…

简单的foreach嵌套循环,如下所示:

foreach(range(1000,9999) as $num)
    foreach(range('A', 'Z') as $c1) 
        foreach(range('A', 'Z') as $c2)
            $res[] = $num . $c1 . $c2; 

如果有语法错误,我不在计算机上,非常抱歉(您可能需要将
$num
转换为字符串,但我想PHP会处理它…

以@dWinder answer为基础构建。您可以构建一个列表

foreach(range(0,9999) as $num)
    foreach(range('A', 'Z') as $c1) 
        foreach(range('A', 'Z') as $c2)
//      This comes out to 6,760,000 items
//          $zips[] = sprintf("%04s%s%s<br>", $num, $c1, $c2); 
foreach(范围(09999)为$num)
foreach(范围('A','Z')为$c1)
foreach(范围('A','Z')为$c2)
//总共有6760000件
//$zips[]=sprintf(“%04s%s%s
”,$num,$c1,$c2);
如果您只想检查格式,可以进行模式匹配

echo testZipNl('1t00AA') .' 1t00AA<br>';

echo testZipNl('11000AA') .' 11000AA<br>';

echo testZipNl('1000AA') .' 1000AA<br>';


function testZipNl($input){
    $input = trim($input);
    $regex = "/^[0-9]{4}[A-Z]{2}$/";
    if (preg_match($regex, $input) AND strlen($input) == 6) {
     return 'True';
    }
 return 'False';
}
echo testZipNl('1t00AA')。'1t00AA
'; echo testZipNl('11000AA')。'11000AA
'; echo testZipNl('1000AA')。'1000AA
'; 函数testZipNl($input){ $input=修剪($input); $regex=“/^[0-9]{4}[A-Z]{2}$/”; if(preg_match($regex,$input)和strlen($input)==6){ 返回“True”; } 返回“False”; }
以@dWinder answer为基础构建。您可以构建一个列表

foreach(range(0,9999) as $num)
    foreach(range('A', 'Z') as $c1) 
        foreach(range('A', 'Z') as $c2)
//      This comes out to 6,760,000 items
//          $zips[] = sprintf("%04s%s%s<br>", $num, $c1, $c2); 
foreach(范围(09999)为$num)
foreach(范围('A','Z')为$c1)
foreach(范围('A','Z')为$c2)
//总共有6760000件
//$zips[]=sprintf(“%04s%s%s
”,$num,$c1,$c2);
如果您只想检查格式,可以进行模式匹配

echo testZipNl('1t00AA') .' 1t00AA<br>';

echo testZipNl('11000AA') .' 11000AA<br>';

echo testZipNl('1000AA') .' 1000AA<br>';


function testZipNl($input){
    $input = trim($input);
    $regex = "/^[0-9]{4}[A-Z]{2}$/";
    if (preg_match($regex, $input) AND strlen($input) == 6) {
     return 'True';
    }
 return 'False';
}
echo testZipNl('1t00AA')。'1t00AA
'; echo testZipNl('11000AA')。'11000AA
'; echo testZipNl('1000AA')。'1000AA
'; 函数testZipNl($input){ $input=修剪($input); $regex=“/^[0-9]{4}[A-Z]{2}$/”; if(preg_match($regex,$input)和strlen($input)==6){ 返回“True”; } 返回“False”; }
您可以使用一个简单的类似寻呼机的功能来避免内存问题:

<?php

function codeRange(int $start, int $end) {
    $codes = [];
    $number = $start - 1;
    while ($number++ !== $end + 1) {
        $letter = 'AA';
        while ($letter !== 'AAA') {
            $codes[] = sprintf('%s%s', $number, $letter++);
        }
    }

    return $codes;
}

echo codeRange(1000, 1010)[0] . PHP_EOL;       // output: 1000AA
echo codeRange(1000, 1010)[1] . PHP_EOL;       // output: 1000AB
echo codeRange(1000, 1010)[2] . PHP_EOL;       // output: 1000AC
echo codeRange(1000, 1010)[7434] . PHP_EOL;    // output: 1010ZY
echo codeRange(1000, 1010)[7435] . PHP_EOL;    // output: 1010ZZ
echo codeRange(9979, 9998)[0] . PHP_EOL;       // output: 9979AA
echo codeRange(9979, 9998)[14195] . PHP_EOL;   // output: 9999ZZ

您可以使用一个简单的类似寻呼机的功能来避免内存问题:

<?php

function codeRange(int $start, int $end) {
    $codes = [];
    $number = $start - 1;
    while ($number++ !== $end + 1) {
        $letter = 'AA';
        while ($letter !== 'AAA') {
            $codes[] = sprintf('%s%s', $number, $letter++);
        }
    }

    return $codes;
}

echo codeRange(1000, 1010)[0] . PHP_EOL;       // output: 1000AA
echo codeRange(1000, 1010)[1] . PHP_EOL;       // output: 1000AB
echo codeRange(1000, 1010)[2] . PHP_EOL;       // output: 1000AC
echo codeRange(1000, 1010)[7434] . PHP_EOL;    // output: 1010ZY
echo codeRange(1000, 1010)[7435] . PHP_EOL;    // output: 1010ZZ
echo codeRange(9979, 9998)[0] . PHP_EOL;       // output: 9979AA
echo codeRange(9979, 9998)[14195] . PHP_EOL;   // output: 9999ZZ

看看递归:那么你需要
1000AA
通过
9999ZZ
?看看递归:那么你需要
1000AA
通过
9999ZZ
?我正要写一些类似的东西。对我来说是可行的,但是PHP由于数组分配而耗尽了内存;甚至直接输出到浏览器也会导致一些连锁反应我希望OP能将这些数据插入DB或其他什么东西。优雅的解决方案,非常简单,并且很容易看到发生了什么。我甚至喜欢将我的单线块用括号括起来,但这太紧凑了,所以需要额外的注意!@MonkeyZeus如果你做一些简单的事情,你可以使用一个生成器来处理内存问题g与价值观immediatly@Brice我在生成器方面没有太多经验,但您能否通过直接在循环中处理值而不是分配给
$res[]
?生成器是否支持
echo generator()之类的语法来避免内存问题[54]
这样我就可以提取第55个组合了?@MonkeyZeus你可以把答案封装在一个函数中,把
yeild
放在
$res[]=
的位置上。然后你可以对每个(generatorFunction()作为$value){
doWhateverYouWantTo($value);
>
不必在内存中保存整个数组,你只需实时执行你想要的任何操作,我想你实际上不需要生成器,因为这只是一个想法。我正要写一些类似的东西。对我来说是可行的,但由于数组分配,PHP内存不足;甚至直接输出到浏览器也会导致一些错误我希望OP能将这些数据插入DB或其他什么东西。优雅的解决方案,非常简单,并且很容易看到发生了什么。我更喜欢将我的一行数据块包装在括号中,但这太紧凑了,所以需要额外注意!@MonkeyZeus如果你正在做某些事情,你可以使用一个生成器来处理内存问题与价值观的冲突immediatly@Brice我在生成器方面没有太多经验,但您能否通过直接在循环中处理值而不是分配给
$res[]
?生成器是否支持
echo generator()之类的语法来避免内存问题[54]
这样我就可以提取第55个组合了?@MonkeyZeus你可以把答案封装在一个函数中,把
yeild
放在
$res[]=
的位置上。然后你可以对每个(generatorFunction()作为$value){
doWhateverYouWantTo($value);
>
不必在内存中保存整个阵列,您只需实时执行您想要的任何操作,我想您实际上不需要生成器,因为这只是一个想法。