Php 更复杂的范围生成
当范围为1到100或a到Z时,使用PHP生成范围很容易。但我需要能够生成101A到101Z或A1到A100这样的范围 我认为PHP可能有一个函数来比较两个字符串,去掉它们之间的共同点,然后返回其余的来形成范围边界。但是我找不到这样的函数。我将如何实现这一点Php 更复杂的范围生成,php,Php,当范围为1到100或a到Z时,使用PHP生成范围很容易。但我需要能够生成101A到101Z或A1到A100这样的范围 我认为PHP可能有一个函数来比较两个字符串,去掉它们之间的共同点,然后返回其余的来形成范围边界。但是我找不到这样的函数。我将如何实现这一点 编辑:我无法控制格式,我只能设置指导原则。最终用户通过在输入字段中输入类似于A1-A100的内容来确定模式。101A到101Z类似于“101”+范围(“A”,“Z”) 及 A1到A100就像“A”+范围(1100) 如果你在寻找A1到Z100
编辑:我无法控制格式,我只能设置指导原则。最终用户通过在输入字段中输入类似于
A1-A100
的内容来确定模式。101A
到101Z
类似于“101”+范围(“A”,“Z”)
及
A1
到A100
就像“A”+范围(1100)
如果你在寻找A1
到Z100
,事情就会变得更复杂。
您可以查看基本转换器等函数的工作方式,如dechex
和base64\u encode
如果你要从十进制转换成你自己的符号,你可以做类似的转换
1 => A1
2 => A2
101 => B1
102 => B2
2601? => Z1
2700? => Z100
这只描述了大纲。如果你想要代码,你必须让你的问题更清楚
任意范围为。。很难。我不知道有什么解决办法
A1-A100
有一个清晰的解决方案,但是关于A1-100Z
,您是如何开始的呢?小码大码或波士顿纽约怎么样?你可以试试:
function rangeFix($from, $to, $prefix = null, $suffix = null) {
return array_map(function($item) use ($prefix, $suffix){
return $prefix . $item . $suffix;
}, range($from, $to));
}
rangeFix(0, 10, 'A', 'Z');
输出:
array (size=11)
0 => string 'A0Z' (length=3)
1 => string 'A1Z' (length=3)
2 => string 'A2Z' (length=3)
3 => string 'A3Z' (length=3)
4 => string 'A4Z' (length=3)
5 => string 'A5Z' (length=3)
6 => string 'A6Z' (length=3)
7 => string 'A7Z' (length=3)
8 => string 'A8Z' (length=3)
9 => string 'A9Z' (length=3)
10 => string 'A10Z' (length=4)
array (size=26)
0 => string '101A' (length=4)
1 => string '101B' (length=4)
2 => string '101C' (length=4)
3 => string '101D' (length=4)
4 => string '101E' (length=4)
5 => string '101F' (length=4)
6 => string '101G' (length=4)
7 => string '101H' (length=4)
8 => string '101I' (length=4)
9 => string '101J' (length=4)
10 => string '101K' (length=4)
11 => string '101L' (length=4)
12 => string '101M' (length=4)
13 => string '101N' (length=4)
14 => string '101O' (length=4)
15 => string '101P' (length=4)
16 => string '101Q' (length=4)
17 => string '101R' (length=4)
18 => string '101S' (length=4)
19 => string '101T' (length=4)
20 => string '101U' (length=4)
21 => string '101V' (length=4)
22 => string '101W' (length=4)
23 => string '101X' (length=4)
24 => string '101Y' (length=4)
25 => string '101Z' (length=4)
或:
输出:
array (size=11)
0 => string 'A0Z' (length=3)
1 => string 'A1Z' (length=3)
2 => string 'A2Z' (length=3)
3 => string 'A3Z' (length=3)
4 => string 'A4Z' (length=3)
5 => string 'A5Z' (length=3)
6 => string 'A6Z' (length=3)
7 => string 'A7Z' (length=3)
8 => string 'A8Z' (length=3)
9 => string 'A9Z' (length=3)
10 => string 'A10Z' (length=4)
array (size=26)
0 => string '101A' (length=4)
1 => string '101B' (length=4)
2 => string '101C' (length=4)
3 => string '101D' (length=4)
4 => string '101E' (length=4)
5 => string '101F' (length=4)
6 => string '101G' (length=4)
7 => string '101H' (length=4)
8 => string '101I' (length=4)
9 => string '101J' (length=4)
10 => string '101K' (length=4)
11 => string '101L' (length=4)
12 => string '101M' (length=4)
13 => string '101N' (length=4)
14 => string '101O' (length=4)
15 => string '101P' (length=4)
16 => string '101Q' (length=4)
17 => string '101R' (length=4)
18 => string '101S' (length=4)
19 => string '101T' (length=4)
20 => string '101U' (length=4)
21 => string '101V' (length=4)
22 => string '101W' (length=4)
23 => string '101X' (length=4)
24 => string '101Y' (length=4)
25 => string '101Z' (length=4)
这是我自己的,不那么优雅的解决方案。它使用以下逻辑: 范围边界有两部分,一部分是数字,另一部分是非数字,如
A1
或1A
。一部分字符串也可以工作,例如A
或1
。我没有使用字符串进行测试,例如A1B
,其中包含两个以上的部分。脚本可能在那里失败了
$s1 = '101A';
$s2 = '101Z';
$s1_d = preg_split('/\d+/', $s1);
$s1_D = preg_split('/\D+/', $s1);
$s2_d = preg_split('/\d+/', $s2);
$s2_D = preg_split('/\D+/', $s2);
if($s1_d[0] == '') $s1_d[0] = $s1_D[0];
else $s1_d[1] = $s1_D[1];
$s1 = $s1_d;
if($s2_d[0] == '') $s2_d[0] = $s2_D[0];
else $s2_d[1] = $s2_D[1];
$s2 = $s2_d;
$prefix = false;
$postfix = false;
if($s1[0] == $s2[1]) die(); // Can't do it.
if($s1[0] == $s2[0]) {
$prefix = $s1[0];
$start = $s1[1];
$end = $s2[1];
}
else {
$postfix = $s1[1];
$start = $s1[0];
$end = $s2[0];
}
$range = range($start, $end);
foreach($range as &$r) {
$r = $prefix . $r . $postfix;
}
var_dump($range);