php范围的数字

时间:2013-11-22 07:20:13

标签: php integer range

我有以下两个数字01850和01899.我需要获取此范围并将每个条目作为其自己的元素存储在数组中。

由于以上是整数,因此范围函数将无效,因为它将删除前导零。我不知道是否会有两个前导零或只有一个。

$r1 = '0150';
$r2 = '0159';

$range = range($r2, $r1);

var_dump($range);

以上将返回150 - 159,但我需要它们为零! 有没有人知道我们如何做到这一点?

6 个答案:

答案 0 :(得分:1)

将所有数字都加上高数字的宽度,因此对090 -> 110等范围仍然有效。

function rangepad($low, $high)
{
    $range = range($low, $high);
    for ($i = 0; $i < count($range); $i++) {
        $range[$i] = str_pad( $range[$i], strlen($high), '0', STR_PAD_LEFT );
    }
    return $range;
}

$r1 = '0150';
$r2 = '0159';

var_dump(rangepad($r1, $r2));

<强>输出:

array(10) { [0]=> string(4) "0150" [1]=> string(4) "0151" [2]=> string(4) "0152" 
            [3]=> string(4) "0153" [4]=> string(4) "0154" [5]=> string(4) "0155" 
            [6]=> string(4) "0156" [7]=> string(4) "0157" [8]=> string(4) "0158" 
            [9]=> string(4) "0159" }

答案 1 :(得分:0)

您可以在之后添加零:

$r1 = '0150';
$r2 = '0159';

$range = range($r2, $r1);
if (preg_match('~^0+~', $r1, $match)) {
    $range = array_map(function($item) use($match) {
        return $match[1] . $item; 
    }, $range);
}
var_dump($range);

答案 2 :(得分:0)

您需要以下内容吗?

$r1 = '0150';
$r2 = '0159';

$range = array_map(function($n) { return '0'.$n;}, range($r2, $r1));

var_dump($range);

答案 3 :(得分:0)

我不知道你是否必须使用range(),但是如果你可以使用别的东西试试这个:

for($i = 150; $i < 160; $i++ )
    $range[] = '0'.$i;
var_dump($range);

答案 4 :(得分:0)

只需填充零以保持数字长度,如下所示:

function padZero($n)
{
    //make the number length 4, like 0159
    return str_pad ( $n, 4, '0', STR_PAD_LEFT );
}

$range = array_map ( 'padZero', $range );

答案 5 :(得分:0)

你不能直接实现它,因为它是一个整数,使用像这样的array_map函数,

$r1 = '0150';
$r2 = '0159';

function f($number) { 
    return sprintf("%04d", $number); 
}
$response = array_map(f, range($r1, $r2));
print_r($response);