以环形角度理解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 = ...
随机推荐
- PHP如何解决网站大流量与高并发的问题(四)
动态语言的并发处理 相关概念 什么是进程.线程.协程 什么是多进程.多线程 同步阻塞模型 异步非阻塞模型 php并发编程实践 什么是进程.线程.协程 进程 进程是一个执行中的程序 进程的三态模型:多道 ...
- Open with Sublime 右键打开
Open with Sublime Sublime 的右键打开没有了,可以使用下面的bat命令添加. @echo off SET st3Path=D:\Program Files\Sublime ...
- onenote 每天输入网络密码
1.问题:只局限 内网 笔记本的弹出输入远程内网服务器用户名密码的情况,每次重启电脑后又会要求输入,否则同步失败 2.解决 控制面板-windows用户-凭据管理器-添加凭据-从上到下一次输入 ip ...
- debian9 ps 命令不能用
# cat > /etc/apt/sources.list << EOF> deb http://mirrors.aliyun.com/debian/ stretch main ...
- python : takes 0 positional arguments but 1 was given
def 的要加self, https://blog.csdn.net/u010269790/article/details/78834410
- AI学习网址记录
https://ai.yanxishe.com/ https://ai.yanxishe.com/page/blogDetail/14365 GAN网络 对抗式生成网络-图像超分辨及图像修复 完全可见 ...
- springboot rabbitMQ 死信对列 实现消息的可靠消费
1 引入 maven 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
- vs 设置护眼背景颜色
工具 —> 选项 —> 环境 —> 字体和颜色 —> 纯文本(显示项中) —> 项目背景 —> 自定义—> 色调位85.饱和度123.亮度205,保存即可.测 ...
- typeScript中的数据类型
/* typeScript中的数据类型 typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验,在typescript中主要给我们提供了以下数据类型 布尔类型(boolean) 数 ...
- LeetCode_342. Power of Four
342. Power of Four Easy Given an integer (signed 32 bits), write a function to check whether it is a ...