创建像这样的范围数组
数组
(
[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
都是 字符串,并且 step
是 整数,则生成的数组将是一系列字节。否则,生成的数组将是一系列数字。
如果 start
小于等于 end
,则序列递增。否则,序列递减。
返回一个元素序列,作为一个 数组,第一个元素为 start
,一直到 end
,序列中的每个值相隔 step
个值。
返回数组的最后一个元素要么是 end
,要么是序列的前一个元素,具体取决于 step
的值。
如果 start
和 end
都是 字符串,并且 step
是 整数,则生成的数组将是一系列字节,通常是拉丁 ASCII 字符。
如果 start
、end
或 step
中至少有一个是 浮点数,则生成的数组将是一系列 浮点数。
否则,生成的数组将是一系列 整数。
step
为 0
,则会抛出 ValueError。
start
、end
或 step
不是 is_finite(),则会抛出 ValueError。
step
为负数,但生成的范围正在递增(即 $start <= $end
),则会抛出 ValueError。
start
或 end
为空字符串 ''
,则会发出 E_WARNING
,并且空字符串将被解释为 0
。
start
或 end
是一个非数字字符串 且包含多个字节,则会发出 E_WARNING
。
start
或 end
是一个字符串,由于另一个边界值为数字而被隐式转换为 整数,则会发出 E_WARNING
。
step
是一个 浮点数,并且 start
和 end
是非数字字符串,则会发出 E_WARNING
。
版本 | 描述 |
---|---|
8.3.0 | 如果 start 和 end 都是字符串,则 range() 现在将始终生成一个包含字节的 数组。以前,如果边界值之一是数字字符串,则另一个边界值将隐式转换为 整数。 |
8.3.0 | 如果 start 或 end 是一个字符串,由于另一个边界值为数字而被隐式转换为 整数,则现在会发出 E_WARNING 。 |
8.3.0 | 如果 start 或 end 是一个非数字字符串且包含多个字节,则现在会发出 E_WARNING 。 |
8.3.0 | 如果 start 或 end 为空字符串,则现在会发出 E_WARNING 。 |
8.3.0 | 如果 step 是一个没有小数部分的 浮点数,则将其解释为 整数。 |
8.3.0 | 如果在生成递增范围时 step 为负数,则现在会抛出 ValueError。 |
8.3.0 | 如果 step 不是有限的,则现在会抛出 ValueError。 |
8.3.0 | 如果 start 或 end 是 数组、对象 或 资源,则现在会抛出 TypeError。以前它们被隐式转换为 整数。 |
范例 #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); // 重新索引数组
// 在这里我们只想要一个包含两个索引的数组,其值为 1 和自身数字(自然素数的规则)
if(count($values_division_number) === 2 && $values_division_number[0] === $number && $values_division_number[1] === 1){
$primes_numbers[$number] = $number;
}
}
}
return array(
'素数个数' => count($primes_numbers),
'素数' => array_values($primes_numbers),
'输出信息' => $print,
'总处理时间' => (time() - $start_time).' 秒。'
);
}
var_dump(natural_prime_numbers(range(0, 11))); // 这里使用 range() 函数 ;-)
// 结果:
// array (size=3)
// '素数个数' => int 5
// '素数' =>
// array (size=5)
// 0 => int 2
// 1 => int 3
// 2 => int 5
// 3 => int 7
// 4 => int 11
// '输出信息' => 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;
}
/*
* 例如: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)中,`foreach(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(包括 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() 函数,它使用步长功能,供那些不幸无法使用 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() 函数的修改版本。它更简单、更简洁、更健壮,但它缺少 thomas 函数具有的高级功能,希望它能对某些人有所帮助。
范例
输入:“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` 参数,而不仅仅是到 `end` 而不包括它,就像大多数其他语言一样。
以下代码片段应该解释我对负步长的意思
<?php
// 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0
print_r(range(100, 0, -10));
?>
基本上,range 函数并不关心哪个数更大或更小,它只是将步长加到起始值上,并将结果添加到一个临时结果变量中,只要它没有达到结束参数值。在这种情况下,添加负数就像减法一样(计算机在底层使用二进制补码来实现这一点)。这将导致数字从 100 变为 90,然后函数将检查 90 是否已达到 0。由于它还没有达到 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
)