将特定年龄范围转换为一系列数字

时间:2018-12-22 05:27:28

标签: php

我允许用户以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 );
}

2 个答案:

答案 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+的范围从n100

函数的输出可以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

Demo on 3v4l.org

答案 1 :(得分:0)

将日期范围存储在一列中以存储在另一列中是

  

from_age和to_age

查询连击 假设您要插入范围10-15,然后 from_age = 10 and to_age = 15

and 10+ from_age = 10 and to_age = 100