要创建像这样的范围数组
数组
(
[11] => 1
[12] => 2
[13] => 3
[14] => 4
)
使用 array_combine 合并两个范围数组
array_combine(range(11,14),range(1,4))
(PHP 4, PHP 5, PHP 7, PHP 8)
range — 创建包含一系列元素的数组
创建包含一系列元素的数组。
如果 start
和 end
都是 string,并且 step
是 int,则生成的数组将是一系列字节。否则,生成的数组将是一系列数字。
如果 start
小于等于 end
,则序列递增。否则,序列递减。
返回一个 array 形式的元素序列,第一个元素为 start
,一直到 end
,序列的每个值相差 step
个值。
返回数组的最后一个元素要么是 end
,要么是序列的前一个元素,具体取决于 step
的值。
如果 start
和 end
都是 string,并且 step
是 int,则生成的数组将是一系列字节,通常是拉丁 ASCII 字符。
如果 start
、end
或 step
中至少有一个是 float,则生成的数组将是一系列 float。
否则,生成的数组将是一系列 int。
step
是 0
,则会抛出 ValueError。
start
、end
或 step
不是 is_finite(),则会抛出 ValueError。
step
为负数,但生成的范围递增(即 $start <= $end
),则会抛出 ValueError。
start
或 end
是空字符串 ''
,则会发出 E_WARNING
,并且空字符串将被解释为 0
。
start
或 end
是一个非 数字字符串,并且包含多个字节,则会发出 E_WARNING
。
start
或 end
是一个字符串,因为另一个边界值为数字而被隐式转换为 int,则会发出 E_WARNING
。
step
是一个 float,并且 start
和 end
是非 数字字符串,则会发出 E_WARNING
。
版本 | 描述 |
---|---|
8.3.0 | 如果 start 和 end 都是字符串,那么 range() 现在将始终生成一个 array 字节。以前,如果其中一个边界值是数字字符串,则另一个边界值将被隐式转换为 int。 |
8.3.0 | 如果 start 或 end 是一个字符串,因为另一个边界值为数字而被隐式转换为 int,则会发出 E_WARNING 。 |
8.3.0 | 如果 start 或 end 是一个包含多个字节的非数字字符串,则会发出 E_WARNING 。 |
8.3.0 | 如果 start 或 end 是空字符串,则会发出 E_WARNING 。 |
8.3.0 | 如果 step 是一个没有小数部分的 float,则将其解释为 int。 |
8.3.0 | 如果在生成递增范围时 step 为负数,则会抛出 ValueError。 |
8.3.0 | 如果 step 不是有限的,则会抛出 ValueError。 |
8.3.0 | 如果 start 或 end 是一个 array、object 或 resource,则会抛出 TypeError。以前它们会被隐式转换为 int。 |
示例 #1 range() 示例
<?php
echo implode(', ', range(0, 12)), PHP_EOL;
echo implode(', ', range(0, 100, 10)), PHP_EOL;
echo implode(', ', range('a', 'i')), PHP_EOL;
echo implode(', ', range('c', 'a')), PHP_EOL;
echo implode(', ', range('A', 'z')), PHP_EOL;
?>
上面的示例将输出
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 a, b, c, d, e, f, g, h, i c, b, a A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
要创建像这样的范围数组
数组
(
[11] => 1
[12] => 2
[13] => 3
[14] => 4
)
使用 array_combine 合并两个范围数组
array_combine(range(11,14),range(1,4))
您可能期望 range($n, $n-1) 为空数组(例如在 Python 中),但实际上 PHP 会假设步长为 -1 如果开始大于结束。
因此,随着 range() 函数中引入单字符范围,内部函数试图变得“智能”,并且(我从这里推断出的行为)显然检查了传入值的类型。如果一个是数字,包括数字字符串,那么另一个被视为数字;如果它是非数字字符串,则被视为零。
但是。
如果以强制其被识别为字符串类型而非数字类型的方式传入数字字符串,则 range() 的功能将大不相同。
比较
<?php
echo implode("",range(9,"Q"));
// 输出 9876543210
echo implode("",range("9 ","Q")); // 9 后面的空格
// 输出 9:;<=>?@ABCDEFGHIJKLMNOPQ
echo implode("",range("q","9 "));
// 输出 qponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987654
?>
我不会称之为错误,因为在我看来,它甚至比该函数的默认用法更有用。
即使您的数字参数用引号括起来,该函数也会生成一个整数数组。
<?php
var_dump( range('1', '2') ); // 输出 array(2) { [0]=> int(1) [1]=> int(2) }
?>
获取字符串数组的简单方法是将 strval() 映射到范围
<?php
var_dump( array_map('strval', range('1', '2')) ); // 输出 array(2) { [0]=> string(1) "1" [1]=> string(1) "2" }
?>
<?php
function natural_prime_numbers(array $range, bool $print_info = false) : array {
$start_time = time();
$primes_numbers = array();
$print = '';
$count_range = count($range);
foreach($range as $number){
$values_division_number = array();
if($number === 0 || $number === 1 || !is_int($number)){ // 消除 0, 1 和其他非整数
continue;
}
if($number != 2 && $number%2 === 0){ // 消除 2 和偶数
continue;
}
for($i = 1; $i <= $number; $i++){
$resultado_divisao = $number / $i;
$values_division_number[$i] = $resultado_divisao;
if($count_range <= 20){ // $count_range <= 20 (+ 性能)
$print .= PHP_EOL;
$info = '数字 '.$number.' 除以数字 '.$i.' 等于: '.($number / $i);
$print .= $info;
if($i === $number){
$print .= PHP_EOL;
}
}
array_walk($values_division_number, function($value, $index) use (&$values_division_number, &$number){ // 引用更改值
// 消除浮点数和其他不等于 1 和自身数字的数字
if(is_float($value) && $value != $number && $value > 1){
unset($values_division_number[$index]);
}
});
$values_division_number = array_values($values_division_number); // 重新索引数组
// 这里我们只想要具有 2 个索引的数组,其值为 1 和自身数字(自然素数的规则)
if(count($values_division_number) === 2 && $values_division_number[0] === $number && $values_division_number[1] === 1){
$primes_numbers[$number] = $number;
}
}
}
return array(
'length_prime_numbers' => count($primes_numbers),
'prime_numbers' => array_values($primes_numbers),
'print' => $print,
'total_time_processing' => (time() - $start_time).' seconds.',
);
}
var_dump(natural_prime_numbers(range(0, 11))); // 这里使用了 range() 函数 ;-)
// 结果:
// array (size=3)
// 'length_prime_numbers' => int 5
// 'prime_numbers' =>
// array (size=5)
// 0 => int 2
// 1 => int 3
// 2 => int 5
// 3 => int 7
// 4 => int 11
// 'print' => string '
// 数字 2 除以数字 1 等于: 2
// 数字 2 除以数字 2 等于: 1
// 数字 3 除以数字 1 等于: 3
// 数字 3 除以数字 2 等于: 1.5
// 数字 3 除以数字 3 等于: 1
// 数字 5 除以数字 1 等于: 5
// 数字 5 除以数字 2 等于: 2.5
// 数字 5 除以数字 3 等于: 1.6666666666667
// 数字 5 除以数字 4 等于: 1.25
// 数字 5 除以 '...
// **************************** //
//
// * 请记住,该函数是递归的,也就是说:5000 的范围在 Intel® Core™ i5-8250U (3.40 GHz) 处理器上需要超过 1 分钟。
//
// **************************** //
?>
"range" 函数非常有用,可以获取字符数组,如 range('C','R') 所示。
在工作中,我不得不扩展 range($a,$b) 函数以在此特殊情况下工作:对于两个大写字符串 $a 和 $b,它应该返回 $a 和 $b 之间的可能字符串。
例如,这可以用于获取 Excel 列索引。
例如,<?php range('A','AD') ==> array('A','B','C',...,'Z','AA','AB','AC','AD') ?>
因此,我编写了函数 getrange($min,$max),它正好能做到这一点。
<?php
function getcolumnrange($min,$max){
$pointer=strtoupper($min);
$output=array();
while(positionalcomparison($pointer,strtoupper($max))<=0){
array_push($output,$pointer);
$pointer++;
}
return $output;
}
function positionalcomparison($a,$b){
$a1=stringtointvalue($a); $b1=stringtointvalue($b);
if($a1>$b1)return 1;
else if($a1<$b1)return -1;
else return 0;
}
/*
* e.g. A=1 - B=2 - Z=26 - AA=27 - CZ=104 - DA=105 - ZZ=702 - AAA=703
*/
function stringtointvalue($str){
$amount=0;
$strarra=array_reverse(str_split($str));
for($i=0;$i<strlen($str);$i++){
$amount+=(ord($strarra[$i])-64)*pow(26,$i);
}
return $amount;
}
?>
在其他语言(如 Python)中,range() 非常高效,但在 PHP 中(与 for 循环相比)则不然。 *
PHP 是一种受 C 语言启发的语言,因此使用 for 循环完全符合语言的审美观。
<?php
// 高效
for($i = $start; $i < $end; $i+=$step)
{
// 对数组做一些操作
}
// 低效
foreach(range($start, $end, $step) as $i)
{
// 对数组做一些操作
}
?>
官方文档没有提到 for 循环,这很奇怪。
但是请注意,在 PHP5 中,当不递增变量时,foreach 比 for 循环更快。
* 我使用 microtime 和 100,000 次迭代进行的测试(大约 10 次)一致地表明,for 循环比 foreach(range()) 快 4 倍。 *
尽管上面一行说 $step 值应该“作为正数给出”,但 range() 函数实际上可以正确处理反向(递减)范围。例如
<?php print_r( range( 24, 20 ) ); ?>
数组
(
[0] => 24
[1] => 23
[2] => 22
[3] => 21
[4] => 20
)
<?php print_r( range( 20, 11, -3 ) ); ?>
数组
(
[0] => 20
[1] => 17
[2] => 14
[3] => 11
)
它实际上会忽略 $step 参数的符号,并根据 $start > $end 或 $end > $start 纯粹地确定是递增还是递减。例如
<?php print_r( range( 20, 11, 3 ) ); ?>
数组
(
[0] => 20
[1] => 17
[2] => 14
[3] => 11
)
<?php print_r( range( 11, 20, -3 ) ); ?>
数组
(
[0] => 11
[1] => 14
[2] => 17
[3] => 20
)
如果你需要零填充、字符串前缀或任何其他掩码,那么 array_map、内联函数和 sprintf 的简单组合就是你的朋友。
<?php
$a = array_map(function($n) { return sprintf('sample_%03d', $n); }, range(50, 59) );
print_r($a);
?>
结果
数组
(
[0] => sample_050
[1] => sample_051
[2] => sample_052
[3] => sample_053
[4] => sample_054
[5] => sample_055
[6] => sample_056
[7] => sample_057
[8] => sample_058
[9] => sample_059
)
使用最小和最大年份集快速创建 HTML 菜单
<?php
/*
** 使用最小和最大年份集快速创建 HTML 菜单。
** @author Chris Charlton <[email protected]>
** @license FREE!
*/
// 年份范围设置
$year_built_min = 1900;
$year_built_max = date("Y");
?>
<select id="yearBuiltMin" size="1">
<?php // 生成最小年份
foreach (range($year_built_min, $year_built_max) as $year) { ?>
<option value="<?php echo($year); ?>"><?php echo($year); ?></option>
<?php } ?>
</select>
<select id="yearBuiltMax" size="1">
<?php // 生成最大年份
foreach (range($year_built_max, $year_built_min) as $year) { ?>
<option value="<?php echo($year); ?>"><?php echo($year); ?></option>
<?php } ?>
</select>
以下是我如何使用它来检查数组是否为关联数组
<?php
if (array_keys($arr)===range(0, sizeof($arr)-1)) {
// 非关联数组
} else {
// 关联数组
}
?>
有趣的是,这两个语句生成了相同的 26 个字符的字母数组。
<?php
$arr = range('A', 'Z');
$arr = range('AA', 'ZZ');
你是否曾经想过要生成一个包含用于解析 Excel 文件的列名范围的数组?
我写了一个函数,从 A 列开始,并添加列名直到你指定的列。
<?php
/**
* 此函数创建一个数组,包含从第一个字母到指定字母之前的所有列名。
*/
function createColumnsArray($end_column, $first_letters = '')
{
$columns = array();
$length = strlen($end_column);
$letters = range('A', 'Z');
// 遍历26个字母。
foreach ($letters as $letter) {
// 在下一个字母前粘贴 $first_letters。
$column = $first_letters . $letter;
// 将列添加到最终数组中。
$columns[] = $column;
// 如果添加的是结束列,则返回所有列。
if ($column == $end_column)
return $columns;
}
// 添加列子节点。
foreach ($columns as $column) {
// 如果在之前的迭代中已经设置了 $end_column,则不进行迭代。
// 如果已经达到最大字符长度,则停止迭代。
if (!in_array($end_column, $columns) && strlen($column) < $length) {
$new_columns = createColumnsArray($end_column, $column);
// 将新创建的列与最终列数组合并。
$columns = array_merge($columns, $new_columns);
}
}
return $columns;
}
?>
用法
<?php
// 返回从 A 到 BI 的所有列名的数组。
createColumnsArray('BI');
?>
因此,我需要一个快速简便的方法来创建一个下拉选择菜单,用于显示小时、分钟和秒,并使用两位数字格式,为了创建这些数据数组,我将 range 与 array_merge 结合在一起。.
<?php
$prepend = array('00','01','02','03','04','05','06','07','08','09');
$hours = array_merge($prepend,range(10, 23));
$minutes = array_merge($prepend,range(10, 59));
$seconds = $minutes;
?>
非常简单。
这里有一个自制的 range() 函数,它使用 step 功能,适用于那些无法使用 PHP5 的不幸用户。
<?php
function my_range( $start, $end, $step = 1) {
$range = array();
foreach (range( $start, $end ) as $index) {
if (! (($index - $start) % $step) ) {
$range[] = $index;
}
}
return $range;
}
?>
php 5.6.16
<?php
var_export(range('Z', 'a'));
/*
array (
0 => 'Z',
1 => '[',
2 => '\\',
3 => ']',
4 => '^',
5 => '_',
6 => '`',
7 => 'a',
)
*/
这是 thomas 的 range_string() 函数的修改版本。它更简单、更清晰、更健壮,但它缺少该函数的进阶功能,希望它对某人有所帮助。
示例
输入: "1, 2, 3, 4, 5, 6" --> 输出: 1, 2, 3, 4, 5, 6
输入: "1-6" --> 输出: 1, 2, 3, 4, 5, 6
输入: "1-6" --> 输出: 1, 2, 3, 4, 5, 6
输入: "1 - -6" --> 输出: 1, 2, 3, 4, 5, 6
输入: "0 - 0" --> 输出: 0
输入: "1, 4-6, 2" --> 输出: 1, 2, 4, 5, 6
输入: "6,3-1" --> 输出: 1, 2, 3, 6
<?php
define('RANGE_ARRAY_SORT', 1);
define('RANGE_ARRAY', 2);
define('RANGE_STRING_SORT', 3);
define('RANGE_STRING', 4);
function range_string($range_str, $output_type = RANGE_ARRAY_SORT)
{
// 移除空格和其他不必要的字符
$find[] = "/[^\d,\-]/";
$replace[] = "";
// 移除重复的连字符
$find[] = "/\-+/";
$replace[] = "-";
// 移除重复的逗号
$find[] = "/\,+/";
$replace[] = ",";
$range_str = preg_replace($find, $replace, $range_str);
// 移除字符串末尾的逗号或连字符
$range_str = trim($range_str,",-");
$range_out = array();
$ranges = explode(",", $range_str);
foreach($ranges as $range)
{
if(is_numeric($range) || strlen($range) == 1)
{
// 只是一个数字;将其添加到列表中。
$range_out[] = (int) $range;
}
else if(is_string($range))
{
// 可能是一系列值。
$range_exp = preg_split("/(\D)/",$range,-1,PREG_SPLIT_DELIM_CAPTURE);
$start = $range_exp[0];
$end = $range_exp[2];
if($start > $end)
{
for($i = $start; $i >= $end; $i -= 1)
{
$range_out[] = (int) $i;
}
}
else
{
for($i = $start; $i <= $end; $i += 1)
{
$range_out[] = (int) $i;
}
}
}
}
switch ($output_type) {
case RANGE_ARRAY_SORT:
$range_out = array_unique($range_out);
sort($range_out);
case RANGE_ARRAY:
return $range_out;
break;
case RANGE_STRING_SORT:
$range_out = array_unique($range_out);
sort($range_out);
case RANGE_STRING:
default:
return implode(", ", $range_out);
break;
}
}
// 示例用法:
$range = range_string("6, 3-1");
?>
我最近才接触到 range() 函数,发现关于它的示例有些错误,甚至效率低下。
<?php
$o = "";
$time_start = microtime(true);
foreach(range(1, 10000) as $val) {
$o .= $val;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo 'rangein: '.$time.'<br />';
$o = "";
$time_start = microtime(true);
$a = range(1, 10000);
foreach($a as $val) {
$o .= $val;
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo 'rangeout: '.$time.'<br />';
?>
结果
rangein: 0.0025348663330078
rangeout: 0.0019199848175049
在某些情况下,差异甚至更大,并且与生成的范围成比例。我认为 range() 的结果被缓存/哈希。
注意:执行顺序会影响执行时间,但差异仍然存在
<?php
function srange ($s) {
preg_match_all("/([0-9]{1,2})-?([0-9]{0,2}) ?,?;?/", $s, $a);
$n = array ();
foreach ($a[1] as $k => $v) {
$n = array_merge ($n, range ($v, (empty($a[2][$k])?$v:$a[2][$k])));
}
return ($n);
}
$s = '1-4 6-7 9-10';
print_r(srange($s));
?>
返回值
数组
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 6
[5] => 7
[6] => 9
[7] => 10
)
他们忘了说些什么。
如果结束值没有遇到最后一个序列,则该函数返回 false。
换句话说
给定一个整数 $n,如果 ( $start + $n * $step ) < $end 并且 ( $start + ( $n + 1 ) * $step ) > $end,则该函数不会给出最大的可能范围,而是返回一个布尔值。
因此最后一个范围数字必须是结束数字。
你可以使用负数代替 `step` 参数。你需要确保 `start` 大于 `end`。注意 php 中的 range() 函数生成包含范围,即它也包含 `end` 参数,而不仅仅是直到它但不包含它,就像大多数其他语言一样。
以下代码片段应该解释我对负步长是什么意思
<?php
// 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0
print_r(range(100, 0, -10));
?>
基本上发生的是 range 函数并不真正关心哪个更大或更小,它只是将步长添加到起点,并将该值追加到一个临时结果变量,只要它没有达到结束参数值。在这种情况下,添加负数就像减法(计算机在幕后对 2 的补码执行此操作)。这将导致数字从 100 变为 90,然后该函数将检查 90 是否已达到 0。由于它还没有完成,它将继续将 -step(在本例中为 -10)添加到最新结果(即 90)中,依此类推。
由于 range() 据说比 array_fill() 更好更快,我认为我尝试一下并在官方文档中发布此注释非常重要,以确保人们可以使用它。
我需要一个函数,它可以创建具有任意长度的字母范围。
你可以通过 $length 参数指定你需要多少个条目。
逻辑类似于计算表中列标题的逻辑。
<?php
/**
* 创建具有任意长度的字母范围
* @param int $length
* @return array
*/
function createLetterRange($length)
{
$range = array();
$letters = range('A', 'Z');
for($i=0; $i<$length; $i++)
{
$position = $i*26;
foreach($letters as $ii => $letter)
{
$position++;
if($position <= $length)
$range[] = ($position > 26 ? $range[$i-1] : '').$letter;
}
}
return $range;
}
?>
这应该更好地模拟 range()。
<?php
function range_wroar($low, $high, $step = 1) {
$arr = array();
$step = (abs($step)>0)?abs($step):1;
$sign = ($low<=$high)?1:-1;
if(is_numeric($low) && is_numeric($high)) {
// 数字序列
for ($i = (float)$low; $i*$sign <= $high*$sign; $i += $step*$sign)
$arr[] = $i;
} else {
// 字符序列
if (is_numeric($low))
return $this->range($low, 0, $step);
if (is_numeric($high))
return $this->range(0, $high, $step);
$low = ord($low);
$high = ord($high);
for ($i = $low; $i*$sign <= $high*$sign; $i += $step*$sign) {
$arr[] = chr($i);
}
}
return $arr;
}
?>
要创建具有定义大小和空值的简单数组或多维数组,请使用以下表达式
<?php
$SimpleArray = array_map(function($n) { return null; }, range(1, 3) );
$MultiArray = array_map(function($n) { return array_map(function($n) { return null; }, range(1, 2) ); }, range(1, 3) );
var_dump($SimpleArray);
var_dump($MultiArray);
// 并输出:
?>
>>$SimpleArray
array(3) {
[0]=> NULL
[1]=> NULL
[2]=> NULL
}
>>$MultiArray
array(3) {
[0]=> array(2) {
[0]=> NULL
[1]=> NULL
}
[1]=> array(2) {
[0]=> NULL
[1]=> NULL
}
[2]=> array(2) {
[0]=> NULL
[1]=> NULL
}
}
?>
由于上面没有明确说明,我想指出你不限于使用整数。
但是,这样做时要小心,因为你可能无法得到预期的范围!
为了说明这一点
<?php
$am = range(500,1600,10);
$fm = range(88.1,107.9,.2);
print_r($am);
print_r($fm);
?>
print_r($am) 给出了预期的结果
数组
(
[0] => 500
[1] => 510
[2] => 520
...
[109] => 1590
[110] => 1600
)
print_r($fm) 则略微(1%)不足
数组
(
[0] => 88.1
[1] => 88.3
[2] => 88.5
...
[97] => 107.5
[98] => 107.7
)
因此,如果你想为数字范围使用非整数值的步长参数,请务必考虑浮点数表示的精度和错误累积;像 pi 或 1/10 这样的步长可能会对较大的范围造成灾难性的影响。如有疑问,请使用整数值步长并进行除法……例如 <?php range(88.1,108,.2) ?> 可能会恢复 107.9,但它不像 <?php array_map(create_function('$x','return $x/10;'),range(881,1079,2)) ?> 那样可扩展。
-emory
我想为下面的 myRange() 函数添加一些更多功能。
现在除了给定 $step 参数,你还可以:
1. 倒序计数
2. 用字母计数
3. 给任何你想要的参数,没有任何(我知道的)会导致无限循环(尝试在前面的函数中使用负 $step……)。
<?php
function myRange($num1, $num2, $step=1)
{
if (is_numeric($num1) && is_numeric($num2))
{
// 我们有一个数字范围
$step = ( abs($step)>0 ? abs($step) : 1 ); // 使 $step 为正数
$dir = ($num1<=$num2 ? 1 : -1); // 获取方向
for($i = (float)$num1; $i*$dir <= $num2*$dir; $i += $step*$dir)
{
$temp[] = $i;
}
}
else
{
// 我们有一个字符范围
$num1=ord((string)$num1); // 转换为 ASCII 值
$num2=ord((string)$num2);
$step = ( abs($step)>0 ? abs($step) : 1 ); // 使 $step 为正数
$dir = ($num1<=$num2 ? 1 : -1); // 获取方向
for($i = $num1; $i*$dir <= $num2*$dir; $i += $step*$dir)
{
$temp[] = chr($i);
}
}
return $temp;
}
print_r(myRange( 1, 3, 0.5 )); // 你可以使用小数步长
print_r(myRange( "a", "k", 3 )); // 或者计算字母
print_r(myRange( "5", "9" )); // 即使隐藏在字符串中,数字也会被检测到
print_r(myRange( "!", "%", 1/pi() )); // 或者用毫无意义的参数乱搞
?>
一个根据字母获取列索引的函数
function getColumnNumber($char){
$alphabet = range('a','z');
$alphabet2 = range('a','z');
$newAlphabet = $alphabet;
foreach($alphabet as $k => $r)
{
foreach($alphabet2 as $row){
$newAlphabet[] = $r.$row;
}
}
$key = array_search($char, $newAlphabet);
return ($key !== false) ? $key : null;
}
这是一个用于从字符串生成范围的函数
<?php
/* 基于给定的格式为“int - int”的范围字符串创建整数数组
例如 range_str('2 - 5'); */
function range_str($str) {
preg_match('#(\\d+)\\s*-\\s*(\\d+)#', $str, $matches);
if ( count($matches) == 3 ) {
return range($matches[1], $matches[2]);
}
return FALSE;
}
// 测试
$array = range_str(' 2 - 4 ');
print_r($array);
?>
这将输出
数组
(
[0] => 2
[1] => 3
[2] => 4
)