深入了解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 相关文章推荐
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
php笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
php自定义加密与解密程序实例
Dec 31 PHP
使用PHP编写发红包程序
Jul 22 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 04 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
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
js事件(Event)知识整理
2012/10/11 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
常用DOM整理
2015/06/16 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Python中super函数用法实例分析
2019/03/18 Python
python 搜索大文件的实例代码
2019/07/08 Python
浅谈python出错时traceback的解读
2020/07/15 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
公司人力资源的自我评价
2014/01/02 职场文书
积极分子思想汇报
2014/01/04 职场文书
初三学习决心书
2014/03/11 职场文书
投资意向书
2014/07/30 职场文书
离婚协议书怎么写
2015/01/26 职场文书
党员违纪检讨书
2015/05/05 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers