深入了解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读取IMAP邮件
Oct 09 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
浅析is_writable的php实现
Jun 18 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
php牛逼的面试题分享
2013/01/18 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
js控制frameSet示例
2013/09/10 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
详解python调度框架APScheduler使用
2017/03/28 Python
Flask框架web开发之零基础入门
2018/12/10 Python
django表单的Widgets使用详解
2019/07/22 Python
Django配置跨域并开发测试接口
2020/11/04 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
Skyscanner波兰:廉价航班
2017/11/07 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
毕业生就业自荐信
2013/12/04 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
班组建设经验交流材料
2014/05/12 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
护士工作失误检讨书
2014/09/14 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
联欢会开场白
2015/06/01 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js