Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.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 更复杂的范围生成_Php - Fatal编程技术网

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

当范围为1到100或a到Z时,使用PHP生成范围很容易。但我需要能够生成101A到101Z或A1到A100这样的范围

我认为PHP可能有一个函数来比较两个字符串,去掉它们之间的共同点,然后返回其余的来形成范围边界。但是我找不到这样的函数。我将如何实现这一点


编辑:我无法控制格式,我只能设置指导原则。最终用户通过在输入字段中输入类似于
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);