我有以下两个数字01850和01899.我需要获取此范围并将每个条目作为其自己的元素存储在数组中。
由于以上是整数,因此范围函数将无效,因为它将删除前导零。我不知道是否会有两个前导零或只有一个。
$r1 = '0150';
$r2 = '0159';
$range = range($r2, $r1);
var_dump($range);
以上将返回150 - 159,但我需要它们为零! 有没有人知道我们如何做到这一点?
答案 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);