2017-05-14 19 views
0

我想创建一个函数,该函数会生成特定模式来描述两个给定数字之间的数字范围。该功能接受两个参数:$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*'); 
+0

你的问题不清楚,你的目的是什么,为什么myfunction(00000,999999)会返回1到2?这是没有意义的...你的例子中正则表达式的重点是什么? – MTroy

+0

MTroy函数的作用是存储与数据库中的数字范围相匹配的模式。这是一个电话应用程序,不幸的是我不能修改模式格式。你可以注意到它不是一个典型的正则表达式,它需要保持这种格式以匹配一些第三方API。此外,范围从00000到99999不应该返回1到2,但只是一个星号,就像我上面的示例。顺便说一下,非常感谢你的回答,我会尽快审查。 –

+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*" 
} 
相关问题