从给定的开始和结束编号创建数字范围的特定模式

时间:2017-05-14 15:17:34

标签: php regex pattern-matching

我想创建一个生成特定模式的函数来描述两个给定数字之间的数值范围。该函数接受两个参数:$startNumber$endNumber。它应该返回一个模式字符串数组。描述它的最佳方式是使用示例:

myfunction(00000, 99999)     = array('*');
myfunction(10000, 29999)     = array('1*', '2*');
myfunction(68000, 68999)     = array('68*');
myfunction(0004000, 0008999) = array('0004*', '0005*', '0006*', '0007*', '0008*');
myfunction(5570000, 5659999) = array('557*', '558*', '559*', '560*', '561*', '562*', '563*', '564*', '565*');
myfunction(3760000, 5259999) = array('376*', '377*', '378*', '379*', '38*', '39*', '4*', '50*', '51*', '520*', '521*', '522*', '523*', '524*', '525*');
myfunction(12345, 45678)     = array('12345*', '12346*', '12347*', '12348*', '12349*', '1235*', '1236*', '1237*', '1238*', '1239*', '124*', '125*', '126*', '127*', '128*', '129*', '13*', '14*', '15*', '16*', '17*', '18*', '19*', '2*', '3*', '40*', '41*', '42*', '43*', '44*', '450*', '451*', '452*', '453*', '454*', '455*', '4560*', '4561*', '4562*', '4563*', '4564*', '4565*', '4566*', '45670*', '45671*', '45672*', '45673*', '45674*', '45675*', '45676*', '45677*', '45678*');
myfunction(000000, 399099)   = array('0*', '1*', '2*', '30*', '31*', '32*', '33*', '34*', '35*', '36*', '37*', '38*', '390*', '391*', '392*', '393*', '394*', '395*', '396*', '397*', '398*', '3990*');

1 个答案:

答案 0 :(得分:0)

由于您的问题的某些部分不明确, 我会更接近你声称的第一个需求......

对于范围

您不需要重新编码现有的; - )

查找range()原生函数,已经可以为您完成:

function myfunction($start, $end)
{
    $r = range($start, $end);
    return array_map(function($n)
    {
        return $n.'*';
    }, $r);
}


var_dump(myfunction(34, 39));
// will output:

array(6) {
  [0]=>
  string(3) "34*"
  [1]=>
  string(3) "35*"
  [2]=>
  string(3) "36*"
  [3]=>
  string(3) "37*"
  [4]=>
  string(3) "38*"
  [5]=>
  string(3) "39*"
}