欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

以环形角度理解php数组索引

程序员文章站 2022-05-22 16:39:27
array_slice()这个从数组中取出一段的函数,需要传递一些整型数字来指明使用者需要目标数组中的哪一个段。 当第二参数 $offset ,和第三参数 $length 长度都是整型正整数的时候,用环形角度理解数组索引还是线段角度理解数组的索引,事实上没什么太大区别。 但当这两个参数中有一个是整型 ......
1 array_slice ( array $array , int $offset [, int $length = null [, bool $preserve_keys = false ]] ) : array

array_slice()这个从数组中取出一段的函数,需要传递一些整型数字来指明使用者需要目标数组中的哪一个段。

当第二参数 $offset ,和第三参数 $length 长度都是整型正整数的时候,用环形角度理解数组索引还是线段角度理解数组的索引,事实上没什么太大区别。

但当这两个参数中有一个是整型负整数时,用环形角度来理解数组索引更为统一。

人类理解抽象事物总是设法与其脑海中建立的形象模型关联,于是我们首先得有下面图中的这两种概念,图中的数字代表了数组的索引。

第一幅图是环形,起点为0,顺时针为正方向,逆时针为负方向

以环形角度理解php数组索引

 

 

 

 第二幅图是线段形,起点为0,朝右为正方向,朝左为负方向

以环形角度理解php数组索引

然后再考虑这两种形象模型在具体的例子中的表现。

第一种情况:

1 $arr_long = [1,  2, 3, 4, 2, 6, 2, 8];//没有贴上打印输出,自然不是忘了
2 var_dump(array_slice($arr_long, 2, 3));

环形和线段形都可以这样描述:从偏移量为2的地方,向正方向截取3个长度,然后返回这一段所组成的数组。

 第二种情况:

1 $arr_long = [1,  2, 3, 4, 2, 6, 2, 8];//没有贴上打印输出,自然不是忘了
2 var_dump(array_slice($arr_long, -2, 3));//这种情况下返回的数组只有两个元素

环形描述:从偏移量为-2的地方,向正方向截取3个长度,然后返回这一段所组成的数组。(偏移量-2,只是为了理解而统一化的说法,具体有没有类似的编程概念,该问谁呢?)

线段形描述:从倒数第二个元素,向正方向截取3个长度,然后返回这一段所组成的数组。

第三种情况:

1 $arr_long = [1,  2, 3, 4, 2, 6, 2, 8];//没有贴上打印输出,自然不是忘了
2 var_dump(array_slice($arr_long, 2, -3));

环形描述:从偏移量为2的地方,向着正方向一直截到偏移量为-3的地方(不包括偏移量为-3的元素),然后返回这一段所组成的数组。(偏移量-3,这样的说法目的同上。)

线段形描述:从偏移量为2的地方,向着正方向一直截到倒数第三个元素的地方(不包括倒数第三个元素),然后返回这一段所组成的数组。

推论

从环形的角度来理解数组,更为的方便快捷,因为环形描述的套路是一致的。

备注:

虽然还有类似这样的情况:

1 $arr_long = [1,  2, 3, 4, 2, 6, 2, 8];
2 var_dump(array_slice($arr_long, -2, -3));

输出为:

1 [running] php "d:\workspace\test.php"
2 d:\workspace\test.php:3:
3 array(0) {
4 }
5 
6 [done] exited with code=0 in 0.512 seconds

有哪个家伙会自找麻烦,用这种方法搞来搞去?