以环形角度理解php数组索引
array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ) : array
array_slice()这个从数组中取出一段的函数,需要传递一些整型数字来指明使用者需要目标数组中的哪一个段。
当第二参数 $offset ,和第三参数 $length 长度都是整型正整数的时候,用环形角度理解数组索引还是线段角度理解数组的索引,事实上没什么太大区别。
但当这两个参数中有一个是整型负整数时,用环形角度来理解数组索引更为统一。
人类理解抽象事物总是设法与其脑海中建立的形象模型关联,于是我们首先得有下面图中的这两种概念,图中的数字代表了数组的索引。
第一幅图是环形,起点为0,顺时针为正方向,逆时针为负方向
第二幅图是线段形,起点为0,朝右为正方向,朝左为负方向
然后再考虑这两种形象模型在具体的例子中的表现。
第一种情况:
$arr_long = [1, 2, 3, 4, 2, 6, 2, 8];//没有贴上打印输出,自然不是忘了
var_dump(array_slice($arr_long, 2, 3));
环形和线段形都可以这样描述:从偏移量为2的地方,向正方向截取3个长度,然后返回这一段所组成的数组。
第二种情况:
$arr_long = [1, 2, 3, 4, 2, 6, 2, 8];//没有贴上打印输出,自然不是忘了
var_dump(array_slice($arr_long, -2, 3));//这种情况下返回的数组只有两个元素
环形描述:从偏移量为-2的地方,向正方向截取3个长度,然后返回这一段所组成的数组。(偏移量-2,只是为了理解而统一化的说法,具体有没有类似的编程概念,该问谁呢?)
线段形描述:从倒数第二个元素,向正方向截取3个长度,然后返回这一段所组成的数组。
第三种情况:
$arr_long = [1, 2, 3, 4, 2, 6, 2, 8];//没有贴上打印输出,自然不是忘了
var_dump(array_slice($arr_long, 2, -3));
环形描述:从偏移量为2的地方,向着正方向一直截到偏移量为-3的地方(不包括偏移量为-3的元素),然后返回这一段所组成的数组。(偏移量-3,这样的说法目的同上。)
线段形描述:从偏移量为2的地方,向着正方向一直截到倒数第三个元素的地方(不包括倒数第三个元素),然后返回这一段所组成的数组。
推论:
从环形的角度来理解数组,更为的方便快捷,因为环形描述的套路是一致的。
备注:
虽然还有类似这样的情况:
$arr_long = [1, 2, 3, 4, 2, 6, 2, 8];
var_dump(array_slice($arr_long, -2, -3));
输出为:
[Running] php "d:\workspace\test.php"
D:\workspace\test.php:3:
array(0) {
} [Done] exited with code=0 in 0.512 seconds
有哪个家伙会自找麻烦,用这种方法搞来搞去?
以环形角度理解php数组索引的更多相关文章
- 转:如何学习SQL(第二部分:从关系角度理解SQL)
转自:http://blog.163.com/mig3719@126/blog/static/285720652010950825538/ 6. 从关系角度理解SQL 6.1. 关系和表 众所周知,我 ...
- 深入理解Js数组
深入理解Js数组 在Js中数组存在两种形式,一种是与C/C++等相同的在连续内存中存放数据的快数组,另一种是HashTable结构的慢数组,是一种典型的字典形式. 描述 在本文中所有的测试都是基于V8 ...
- Numpy数组基本操作(数组索引,数组切片以及数组的形状,数组的拼接与分裂)
一:数组的属性 每个数组都有它的属性,可分为:ndim(数组的维度),shape(数组每个维度的大小),size(数组的总大小),dtype(数组数据的类型) 二:数组索引 和python列表一样,N ...
- 从源码角度理解Java设计模式——装饰者模式
一.饰器者模式介绍 装饰者模式定义:在不改变原有对象的基础上附加功能,相比生成子类更灵活. 适用场景:动态的给一个对象添加或者撤销功能. 优点:可以不改变原有对象的情况下动态扩展功能,可以使扩展的多个 ...
- IL角度理解C#中字段,属性与方法的区别
IL角度理解C#中字段,属性与方法的区别 1.字段,属性与方法的区别 字段的本质是变量,直接在类或者结构体中声明.类或者结构体中会有实例字段,静态字段等(静态字段可实现内存共享功能,比如数学上的pi就 ...
- IL角度理解for 与foreach的区别——迭代器模式
IL角度理解for 与foreach的区别--迭代器模式 目录 IL角度理解for 与foreach的区别--迭代器模式 1 最常用的设计模式 1.1 背景 1.2 摘要 2 遍历元素 3 删除元素 ...
- 从tcp原理角度理解Broken pipe和Connection reset by peer的区别
从tcp原理角度理解Broken pipe和Connection reset by peer的区别 http://lovestblog.cn/blog/2014/05/20/tcp-broken-pi ...
- Numpy数组索引为-1和None
numpy的数组操作方便,可以用:来切片,用布尔数组或者布尔表达式来查找符合条件的数据,也可以用数组作为另一个数组的索引来查找指定的数据.但有时也会见到数组索引为-1和None.两者的用法如下: 1. ...
- numpy 数组索引数组
在numpy中,数组除了可以被整数索引,还可以被数组索引. a[b]就是已数组b的元素为索引,读取数组a的值. 当被索引数组a是一维数组,b是一维或则多维数组时,结果维度维度与索引数组b相同. a = ...
随机推荐
- js jquery 实现 排班,轮班,日历,日程。使用fullcalendar 插件
如果想用fullcalendar实现排班功能,或者日历.日程功能.那么只需要简单的几步: 这里先挂官网链接: fullcalendar fullcalendar官网下载链接 一.下载及简单配置 1.这 ...
- Git的使用(5) —— 在IDEA上使用
1. 在IDEA中配置Git 前言:IDEA中鼓捣Git是真的费劲,建议还是用TortoiseGit. 打开IDEA的Settings,左侧菜单列表中的Version Control里面找到Git. ...
- 关于SQL中的ROWNUM问题
前言 昨天改小程序的后台,看见之前写的分页很奇怪,startIndex和endIndex两个下标, endIndex 总是在里面层,而startIndex总是在外层,我随后改了,直接Where row ...
- name_scope与variable_scope 详解
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lucky7213/article/deta ...
- nginx: [emerg] unknown directive "stub_status" in /home/oscf/nginx/conf/conf.d/ngx_metric.conf
解压安装过程命令如下: cd /home/oscf #该目录下有nginx压缩包 mkdir nginx tar -zxvf nginx-1.16.0.tar.gz cd nginx-1.16.0 . ...
- qemu通过控制台向虚拟机输入组合键
ctrl+alt+2 开启控制台 ctrl+alt+1 关闭控制台 在控制台中输入 sendkey ctrl-alt-delete 发送指令
- Nginx + Naxsi 打造建议WAF
--prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf ...
- Flutter 目录结构介绍、入口、自定义 Widget、MaterialApp 组件、Scaffold 组件
Flutter 目录结构介绍 文件夹 作用 android android 平台相关代码 ios ios 平台相关代码 lib flutter 相关代码,我们主要编写的代 码就在这个文件夹 test ...
- SpringBoot启动嵌入式tomcat源码解读
一.SpringBoot自动拉起Tomcat SpringBoot框架是当前比较流行的java后端开发框架,与maven结合大大简化了开发人员项目搭建的步骤,我们知道SpringBoot的启动类启动后 ...
- Spring cloud微服务安全实战-6-3JWT改造之网关和服务改造
网关上认证去做哪些改造 在网关上用jwt去解析用户信息,而不再发送校验令牌的请求了. 之前的时候网关上实际上写了很多的代码 包括认证,发check_token去把token请求,换成用户信息. 这俩是 ...