作为一个 PHPer ,如果想要你生成 [1,31] 区间的 31 个数字,你一般会怎么做?

仔细想想,好好回忆一下,你第一时间想到的,会不会是使用一个 for 循环来生成,就像下面这样

$days = array();

for($i = 1; $i <= 31; $i++ ) {

$days[] = $i;

}

我想,应该,很少人会使用 range() 函数来生成

$days = range(1,31,1);

我不知道这是不是我们 PHPer 的悲剧,因为,似乎,很少有教程会交代可以使用 foreach(range()) 的方式来代替 for 循环。

其实,PHP 中的 range() 函数比 Python 中的 range() 强大多了,除了没有使用生成器的方式。

range() 函数

根据官方文档,range() 函数被归纳为 「 数组函数 」,因为它的结果就是产生一个数组,一个普通数组。

range() 函数的原型如下

array range ( mixed $start , mixed $end [, number $step = 1 ] )

range() 函数根据范围 [$start,$end] 创建一个数组,步长为 $step ,默认步长为 1

注意: 返回的区间是一个左闭右闭的区间,也就是包含了 $start 和 $end 两个值。

参数

说明

start

返回的数组区间序列的第一个值

end

返回的数组区间序列结束于 end 的值

step

如果设置了步长 step,会被作为单元之间的步进值。step 应该为 正值。不设置 step 则默认为 1。

用法一 : $start 和 $end 参数都是整数

返回整数区间 [0,12] 且步长为 1 的数组

// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

foreach (range(0, 12) as $number) {

echo $number;

}

返回整数区间 [0,100] 且步长为 10 的数组

// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

foreach (range(0, 100, 10) as $number) {

echo $number;

}

返回整数区间 [0,99] 且步长为 10 的数组

// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90)

foreach (range(0, 99, 10) as $number) {

echo $number, " " ;

}

注意:返回的数组的最后一个值为 90 ,因为 100 < 99 ,所以不满足条件

如果步长为负数,那么会取该步长的绝对值

// array(0, 2, 4, 6, 8, 10, 12)

foreach (range(0, 12,2) as $number) {

echo $number;

}

如果 $start < $end,那么返回的数组会从大到小

// array(12, 10, 8, 6, 4, 2, 0)

foreach (range(12, 0,2) as $number) {

echo $number;

}

如果步长 $step 为 0 ,会抛出一个异常

// Warning: range(): step exceeds the specified range

var_dump(range(12, 0, 0));

如果步长为字符串,那么会使用 intval() 转换为整数,如果转换后的结果为 0,则参考 6

// array(12, 10, 8, 6, 4, 2, 0)

foreach (range(12, 0,'2a') as $number) {

echo $number;

}

用法二 : $start 和 $end 参数可以是整数也可以是浮点数,$step 也可以是浮点数

$start 和 $end 是浮点数,而 $step 是整数,结果和整数是类似的

// array(12.8, 10.8, 8.8, 6.8, 4.8, 2.8)

foreach (range(12.8, 2.2,2) as $number) {

echo $number;

}

$start 和 $end 是浮点数,且 $step 也是浮点数,结果和整数也是类似的

// array(12.8, 10.3, 7.8, 5.3, 2.8)

foreach (range(12.8, 2.2,2.5) as $number) {

echo $number;

}

如果步长为字符串,那么会使用 doubleval() 转换为浮点数,如果步长为 0.0 那么将抛出异常

// array(12.8, 10.3, 7.8, 5.3, 2.8)

foreach (range(12.8, 2.2,'2.5') as $number) {

echo $number;

}

转换后步长为 0 则抛出异常

// Warning: range(): step exceeds the specified range

foreach (range(12.8, 2.2,'a2.5') as $number) {

echo $number;

}

用法三 : $start 和 $end 如果有一个是整数或者浮点数

$start 和 $end 如果有一个是整数或者浮点数,而另一个是字符串,那么会将另一个也转换为整数或者浮点数

一个是整数而另一个是字符串整数,那么会将另一个转换为整数,结果和都是整数是类似的

// array(0, 2, 4, 6, 8, 10, 12)

foreach (range(0, '12',2) as $number) {

echo $number;

}

一个是浮点数而另一个是字符串整数或浮点数,那么会将另一个转换为浮点数,结果和都是整数是类似的

// array(12.8, 10.8, 8.8, 6.8, 4.8, 2.8)

foreach (range(12.8, '2', 2) as $number) {

echo $number;

}

用法四 : $start 和 $end 如果全部是字符串

$start 和 $end 如果全部是字符串,那么会取两个字符串的第一个字母,并按照 ASCII 字母顺序表,取步长对应的值

如果 $start 和 $end 都是单个字母,那么直接按照 ASCII 顺序取步长的值

// array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');

foreach (range('a', 'i') as $letter) {

echo $letter;

}

如果按照 ASCII 顺序,$start 大于 $end ,那么会反向步长取值,这个和整数是类似的

// array('c', 'b', 'a');

foreach (range('c', 'a') as $letter) {

echo $letter;

}

如果 $start 或 $end 任意一个字符串长度大于 1 ,那么只会取第一个字母

// array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');

foreach (range('abc', 'i') as $letter) {

echo $letter;

}

如果两个都是字符串,而其中一个是整数字符串或者浮点数字符串,那也会当作普通字符串来处理

echo implode("",range("9 ","Q")); //space after the 9

// prints 9:;<=>?@ABCDEFGHIJKLMNOPQ

php range第二个参数比第一个小,鲜为人知的 PHP range() 函数相关推荐

  1. js 通过jquery插件获取url参数 其中的一个小问题,或许不算Bug。

    形如:http://localhost:10864/srch.htm?keys=&type=1 这样的地址,如果我们要取keys的参数: var srchKey = $.query.get(& ...

  2. 一个小例子介绍Obj-C的函数命名方式

    对于以前做C#或者JAVA开发的朋友而言,初次接触iOS开发,Obj-C的函数命名方式可能会感觉非常不习惯. 尤其是打开AppDelegate.m,映入眼帘的代码竟然是: - (BOOL)applic ...

  3. listen函数的第二个参数_【图像处理】OpenCV系列十七 --- 几何图像变换函数详解(一)...

    上一篇我们学习了仿射变换的warpAffine函数,知道了如何用这个函数对图像进行旋转.平移等操作,那么本节我们一起来学习一下与仿射变换相关的其他函数以及相关的几何图像变换. 一.convertMap ...

  4. OpenCV中cvADDS()为啥第二个参数要是CvScalar类型?掩码mask=NULL又是何意?

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 void cvAddS(const CvArr* ...

  5. C语言strftime()函数 (格式化时间)(注意第二个参数size_t maxsize一定要大于第三个参数const char *format指向字符串的长度)

    需包含:C 标准库 - <time.h> 文章目录 描述 声明 参数 返回值 实例 使用☞坑(注意第二个参数size_t maxsize一定要大于第三个参数const char *form ...

  6. 输入梯度惩罚与参数梯度惩罚的一个不等式

    ©PaperWeekly 原创 · 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP.神经网络 在本博客中,已经多次讨论过梯度惩罚相关内容了.从形式上来看,梯度惩罚项分为两种,一种是关于输入 ...

  7. listen函数的第二个参数_JavaScript数组构造from函数

    之前我们讲解了数组的填充方法fill函数,fill函数是对当前的数组进行填充且返回值为当前的数组对象,from和fill相类似也可以对数组进行填充,但是和fill不同的是form的返回值是一个新的数组 ...

  8. java sort 第二个参数_详解java Collections.sort的两种用法

    Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式: public static > void sort(List list) { l ...

  9. [react] react中setState的第二个参数作用是什么呢?

    [react] react中setState的第二个参数作用是什么呢? 第二个参数是一个callback函数,用于setState设置state的属性值成功之后的回调,此时调用this.state.p ...

最新文章

  1. 链表问题12——将单链表的每K个节点之间逆序
  2. 得到windows系统图标的解决方案(转)
  3. java基础.0——Object类
  4. Python组织文件 实践:将文件的不同版本备份为ZIP文件
  5. (二)Linux命令使用
  6. 2021-10-11 ! LeetCode226. 翻转二叉树 的前中后层序遍历写法
  7. Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
  8. retrofit2使用详解_秒懂Retrofit2之Converter
  9. 2引擎帮助文档_Simcenter Amesim 16液压部分帮助文档中英文对照(2)
  10. Spring Cloud Alibaba迁移指南(四):零代码兼容 Api-Gateway 1
  11. ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
  12. 浪潮服务器开启远程管理,浪潮服务器远程管理
  13. 自动化测试--8种定位方式以及等待详解
  14. 记一次new Map()
  15. 测试小故事82:好好说话
  16. 【建议收藏】产品经理面试真题大全
  17. Docker Wnmp 搭建
  18. android手机电视投影,教程向 | 手机投屏激光电视操作指南
  19. 24岁女孩与30多岁成熟有家男人
  20. word2016去除回车符和换行符的方法

热门文章

  1. intel服务器主板芯片,英特尔® 服务器主板 S2600CW2SR
  2. oracle is删除表数据库,rman删除expired备份提示“This command is forbidden”
  3. python合并多个excel为一个_Python合并多个Excel数据
  4. 计算机病毒能够自我复制自我执行吗,计算机病毒能够自我复制、自我执行。
  5. python 调用 tensorflow,C++与python 相互调用-- c++调用tensorflow教程
  6. 如何基于DDD构建微服务架构
  7. sse php,sse.php · Gitee 极速下载/modphp - Gitee.com
  8. azure mysql 只读节点_Azure MySQL PaaS 创建MySQL异地只读数据库 (Master-Slave)
  9. c++ hashmap入门教程
  10. nanodet onnx踩坑记录