深入了解PHP中的Array数组和foreach


Posted in PHP onNovember 06, 2016

1. 了解数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。详细的解释可参见:PHP.net中的Array数组    。

2.例子:一般的数组

这里,我通过一个简单的例子,并使用图形方式来了解数组。

$a = array(3 => 'a', 1 => 'b', 2 => 'c');

echo var_dump($a);

深入了解PHP中的Array数组和foreach深入了解PHP中的Array数组和foreach

 [注]:使用箭头描述数组$a各个单元对应某一内存地址的数据值(实际上,它内部结构采用HashTable结构,可以参考鸟哥写的PHP中的Hash算法)。

3.例子:在数组定义中,添加引用。

$x = 'x';
$a = array(3 => 'a', 1 => &$x, 2 => 'c');

echo "<hr>";
echo var_dump($a);

$x = 'y';
echo var_dump($a);

数组$a中的第2个单元$a[1]与$x对应的是同一个数据,使用var_dump($a)的时候,会看到数组的第2个单元多个&符号,即&string(1) "x",表示引用。

当 修改$x的值='y',也等同于修改$a[1]的值='y'。

下图可以清楚的描述这一变化:

深入了解PHP中的Array数组和foreach

4.例子:使用foreach遍历数组。

$a = array(3 => 'a', 1 => 'b', 2 => 'c');

echo "<hr>";
foreach ($a as $key => $value) {
  echo "$key => $value <br>";

}

深入了解PHP中的Array数组和foreach

每次循环中,当前数组中单元的值被赋给 $value ,单元的key被赋给$key。如下图描述:

深入了解PHP中的Array数组和foreach

【注:】灰色虚箭头表示赋予某一值。

 5.例子:在foreach遍历数组中,使用引用赋值。

$a = array(3 => 'a', 1 => 'b', 2 => 'c');

echo "<hr>";
foreach ($a as $key => &$value) {
  $value.='n';
  echo "$key => $value <br>";

}

深入了解PHP中的Array数组和foreach

每次循环中, $value 都指向当前数组中单元的值,再执行“ $value.='n'; ”代码 ,如下图描述:

深入了解PHP中的Array数组和foreach

6.例子:对例子5的进一步分析。

在例子5,foreach遍历数组完成后,不会自动销毁$value变量,与数组$a最后一个单元$a[2]指向同一个数据。

这时候改变$value的值,也就是改变了$a[2]的值。

$value='m';

echo "<hr>";
echo "\$value=$value <br>";
echo var_dump($a);

深入了解PHP中的Array数组和foreach

深入了解PHP中的Array数组和foreach

实例验证, 数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。

7.小结

以上例子,只是描述php中的array数组和foreach的一些特性。学习最后,感觉php中的array数组和foreach不同于别的编程语言,不能使用类似C语言的结构分析PHP。

以上就是小编为大家带来的深入了解PHP中的Array数组和foreach全部内容了,希望大家多多支持三水点靠木~

PHP 相关文章推荐
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
php实现图片缩放功能类
Dec 18 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
php微信支付之公众号支付功能
May 30 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 PHP
PHP运行模式汇总
Nov 06 #PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 #PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 #PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 #PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
Nov 05 #PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 #PHP
PHP实现一个简单url路由功能实例
Nov 05 #PHP
You might like
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
Python 的内置字符串方法小结
2016/03/15 Python
win10系统中安装scrapy-1.1
2016/07/03 Python
Python单例模式实例详解
2017/03/01 Python
python绘制简单彩虹图
2018/11/19 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python流程控制语句的深入讲解
2020/06/15 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
教育局长自荐信范文
2013/12/22 职场文书
社团活动策划书范文
2014/01/09 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
班级心理活动总结
2014/07/04 职场文书
机电一体化专业求职信
2014/07/22 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
董事会决议范本
2015/07/01 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers