深入了解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 memcache扩展的三种安装方法
Apr 26 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
解析php中call_user_func_array的作用
Jun 07 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
php数据库备份还原类分享
Mar 20 PHP
php生成随机颜色的方法
Nov 13 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
Oct 10 PHP
php在linux环境中如何使用redis详解
Dec 15 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
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php生成图片验证码
2015/06/09 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
python随机数分布random测试
2018/08/27 Python
详解python中eval函数的作用
2019/10/22 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python动态规划算法实例详解
2020/11/22 Python
详解Python中的文件操作
2021/01/14 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
普通党员整改措施
2014/10/24 职场文书
见习报告怎么写
2014/10/31 职场文书