我允许用户以2种格式存储在线课程的年龄范围。
10-15
和
10 +
我需要将它们存储为数据库中的实际数字(最多100个)。
所以,对于10-15,我将存储10,11,12,13,14,15
对于10+,我将一直存储10、11、12、13、14、15、16等,一直到100。
目标是能够更轻松地对数据库进行过滤。
正在寻找有关如何将这两种数字类型转换为数字序列的PHP建议。
这是我到目前为止所拥有的。我相信我已经解决了这种情况。
if (preg_match_all("/[\+]/", $agerange)==1) {
}
elseif (preg_match_all("/[\-]/", $string)==1)
{
$start = $agerange[0];
$end = $agerange[strlen($agerange) - 1];
array range ( $start , $end , 1 );
}
答案 0 :(得分:2)
您可以使用类似这样的函数将范围字符串映射到一组数字中:
function map_range($range) {
if (preg_match('/^(\d+)\+$/', $range, $matches)) {
return range((int)$matches[1], 100);
}
elseif (preg_match('/^(\d+)-(\d+)$/', $range, $matches)) {
return range((int)$matches[1], (int)$matches[2]);
}
else {
// illegal
return array();
}
}
该函数检查合法范围,即用-
分隔的两个数字,或后跟+
的数字,并使用range
函数创建由以下各项指定的值的数组该范围字符串。假定格式n+
的范围从n
到100
。
函数的输出可以implode
来创建逗号分隔的值列表,例如
$ranges = array('10-15', '90+', '20-30');
foreach ($ranges as $range) {
echo implode(',', map_range($range)) . "\n";
}
输出:
10,11,12,13,14,15
90,91,92,93,94,95,96,97,98,99,100
20,21,22,23,24,25,26,27,28,29,30
答案 1 :(得分:0)
将日期范围存储在一列中以存储在另一列中是
from_age和to_age
查询连击 假设您要插入范围10-15,然后 from_age = 10 and to_age = 15
and 10+ from_age = 10 and to_age = 100