资讯专栏INFORMATION COLUMN

php数组原理遍历原理揭秘

wanghui / 1633人阅读

摘要:数组原理遍历原理揭秘数组原理遍历原理揭秘可见,数组其实已经改变了,但是遍历出来的并没有增加的哪一项。此时,我们也可以输出一下当前指针位置数组原理遍历原理揭秘数组原理遍历原理揭秘数组指针停留在了位置上。

php中的中的数组跟js里面数组是不大一样的。php中数组的下标可以整数也可以是字符串,而且数组中元素的顺序不是由下标决定的,而是由添加元素的顺序。
数组基础

$arr1 = array(元素1,元素2,。。。。。 );
array(1, 5, 1.1, “abc”, true, false);//可以存储任何数据,此时为“默认下标”,
array(2=>1, 5=>5, 3=>1.1, 7=>“abc”, 0=>true);//下标可以任意设定(无需顺序,无需连续)
array(2=>1, 5, 1=>1.1, “abc”, 0=>true)//可以加下标,也可以不加(默认下标),下标分别是:2,3,1,4,0
//默认下标规则:前面已经用过的最大数字下标+1
array(2=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true)//混合下标,同样遵循默认下标规则
array(-2=>1, ‘dd’=>5, 1.1, “abc”, true);//负数下标不算在整数下标中,而只当作字符下标
//则最后3项的下标是:0, 1, 2
array(2.7=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true);//浮点数下标为自动转换为整数,且直接抹掉小数
array(“2.7” =>1, ‘dd’=>5, “11”=>1.1, “abc”, true)//纯数字字符串下标,当作数字看待,
//则此时下标为:2, ‘dd’, 11, 12, 13
array(2=>1, ‘dd’=>5, true=>1.1, “abc”, false=>true)//布尔值当下标,则true为1,false为0;
array(2=>1, ‘dd’=>5, 2=>1.1, “abc”, true)//如果下标跟前面的重复,则单纯覆盖前面同名下标的值
//此时相当于为:array(2=>1.1, ‘dd’=>5, “abc”, true)
其他形式;
$arr1[] = 1;
$arr1[] = 5;
$arr1[] = 1.1;//直接在变量后面使用[],就成为数组,并依次赋值。
。。。。
$arr2[‘aa’] = 1;
$arr2[‘bbbcc’] = 5;
$arrr2[5] = 1.1;
。。。。。。。。
这种形式写的下标,其实跟使用array语法结构几乎一样。
取值:通过下标。
赋值(同定义):
数组遍历:

遍历基本语法:
foreach( $arr as [ $key => ] $value ) //$key可以称为键变量,$value可以称为值变量。
{
//这里就可以对$key 和 $value 进行所有可能的操作——因为他们就是一个变量
//$key 代表每次取得元素的下标,可能是数字,也可以能是字符串
//$value 代表每次取得元素的值,可能是各种类型。
//此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。
}
数组指针和遍历原理:
每个数组内部都有一个“指针 ”,该指针指定了当前数组取值取到的是某个元素。
其实所谓的遍历就是指针一次移动,然后取值操作。
下面有一个跟指针有关的数组函数:
1、$v1=current($arr) //取到当前数组指针指向的元素的值,没有则返回false;
2、$v1 = key($arr) //取到当前数组指针指向的元素的下标,没有则返回false;
3、$v1 = prev($arr) //将指针移动到“上一个元素”,并且取到它的值;
4、$v1 = next($arr) //将指针移动到“下一个元素”,并且取到它的值;
5、$v1 = reset($arr) //将指针移动到“第一个元素”,并且取到它的值;
6、$v1 = end($arr) //将指针移动到“最后一个元素”,并且取到它的值
7、$v1 = each($arr) //取得指针当前指向的元素的下标和值,并且将指针移到下一个元素,没有则返回false。
for+next+reset遍历数组
php数组原理遍历原理揭秘

while+each+list遍历
说到这个遍历,首先我们要了解一下each和list的功能
each($arr);返回数组指针当前指向的元素的键和值,并且是双份,并且移动指针到下一位,如果没有,则返回false;
所谓的双份是什么意思?我们测试一下即可:
php数组原理遍历原理揭秘

结果:
php数组原理遍历原理揭秘

取到了第一个元素的下标和值,各两份,而且此时数组指针也指向了第二元素。
list($v1,$v2,$v3……)=$arr list的功能就很奇怪了
php数组原理遍历原理揭秘

php数组原理遍历原理揭秘

依次取得数组中对应索引的值,不过只能取到数组中索引为0,1,2……这些对应的值。如果索引有重复的,则后面值覆盖前面值。
接下来就可以通过这些进行数组遍历了:
php数组原理遍历原理揭秘

php数组原理遍历原理揭秘

foreach遍历:这个是我们常见的遍历方式,不过这个方式也有一个很特别的地方,当我们遍历过程中对数组进行改变,则会拷贝一个原数组继续遍历。可能这里不太好理解,不过看一下例子就明白了。
php数组原理遍历原理揭秘

php数组原理遍历原理揭秘

可见,数组其实已经改变了,但是foreach遍历出来的并没有增加的哪一项。此时,我们也可以输出一下当前指针位置:
php数组原理遍历原理揭秘

php数组原理遍历原理揭秘

数组指针停留在了位置3上。由此可以推断:本来是在原数组上进行遍历的,结果数组发生改变,然后拷贝了一个原数组,在拷贝的数组上完成后面的遍历。

本文由甲爪cpa联盟整理编辑!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22430.html

相关文章

  • foreach遍历过程中的奇怪现象(PHP5)

    摘要:中基础中的三大坑,遍历,引用机制,数组。今天我们在讲讲中的一些奇怪现象。本文适合有一定基础的。运行流程共用一个结构体开始遍历数组,进行判断,拷贝数组是一个新的结构体,操作的是新的结构体。那么遍历数组时,全程与原数组无关。 PHP中基础中的三大坑,foreach遍历,引用机制&,数组。 今天我们在讲讲foreach中的一些奇怪现象。 在讲解之前,可以先看看我其他相关的文章,属于同一个大的...

    kgbook 评论0 收藏0
  • PHP执行原理

    摘要:执行原理是一门应用非常简单,开发效率极高的一门语言,其弱类型的变量能省去程序员大量的定义变量类型转换等的时间和精力。程序最终被翻译为一组处理函数的顺序执行。只有减为时才会真正执行销毁操作。 PHP执行原理 php是一门应用非常简单,开发效率极高的一门语言,其弱类型的变量能省去程序员大量的定义变量、类型转换等的时间和精力。它是一种适用于web开发的动态语言。 1. php设计的原理和特点...

    silvertheo 评论0 收藏0
  • 网络安全方面学习笔记(持续更新...)

    摘要:网关一般就是网络交换机如路由器服务器等,网关的地址是具有路由功能的设备的地址,具有路由功能的设备有路由器启用了路由协议的服务器实质上相当于一台路由器代理服务器也相当于一台路由器。表示后面即使执行错误,也不报错。 ...

    VishKozus 评论0 收藏0
  • PHP面试之一:PHP基础知识点

    摘要:之前,第三方编译是管理器,是解释器之后,官方自带,与模式。又是解释器,又是管理器以模块模式运行常见配置数组排序 PHP引用变量 什么是引用变量?如何定义引用变量? 引用意味着用不同的名字访问同一个内容定义引用变量:使用& 引用变量的工作原理 普通变量的工作原理 $a = range(0,10000); var_dump(memory_get_usage()); //int(7420...

    waterc 评论0 收藏0
  • 原生JS大揭秘—JS代码底层运行原理

    摘要:是一种基于对象的动态弱类型脚本语言以下简称,是一种解释型语言,和其他的编程语言不同,如等编译型语言,这些语言在代码执行前会进行通篇编译,先编译成字节码机器码。然后在执行。 JavaScript是一种基于对象的动态、弱类型脚本语言(以下简称JS),是一种解释型语言,和其他的编程语言不同,如java/C++等编译型语言,这些语言在代码执行前会进行通篇编译,先编译成字节码(机器码)。然后在执...

    xiongzenghui 评论0 收藏0

发表评论

0条评论

wanghui

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<