我对这个感到有些困惑,我现在很难在网上找到类似的例子.
在PHP中工作,我希望从形式字段中获取输入,可以是表单中的"值列表","范围"或两者的组合;
3,5,6,9,11,23
Run Code Online (Sandbox Code Playgroud)
要么
3-20
Run Code Online (Sandbox Code Playgroud)
要么
3-6,8,12,14-50
Run Code Online (Sandbox Code Playgroud)
我想将这些作为整数数组返回,例如
3,4,5,6,8,12,14,15,16...
Run Code Online (Sandbox Code Playgroud)
我不打算把它们全部输出,但这个想法很明显!
是否有可用的功能,或者我从哪里开始写一个?
hak*_*kre 12
$input = '3,5,6,9,11,23,14-77';
$result = preg_replace_callback('/(\d+)-(\d+)/', function($m) {
return implode(',', range($m[1], $m[2]));
}, $input);
Run Code Online (Sandbox Code Playgroud)
给你:
3,5,6,9,11,23,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77
Run Code Online (Sandbox Code Playgroud)
它是如何工作的:你基本上在字符串中两个令牌:范围令牌(1-n)(定义为正则表达式:(\d+)-(\d+))和回退(别的).
preg_replace_callback允许通过回调函数扩展令牌字符串.然后,该回调函数只使用PHP的range函数将两个匹配的数值扩展到逗号分隔的列表中implode.
之后,字符串采用标准化格式,您可以explode:
// as array:
print_r(explode(',', $result));
Run Code Online (Sandbox Code Playgroud)