深入了解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 IP及IP段进行访问限制的代码
Dec 17 PHP
php继承的一个应用
Sep 06 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
php实现三级级联下拉框
Apr 17 PHP
PHP数组函数知识汇总
May 12 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
Yii2框架控制器、路由、Url生成操作示例
May 27 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
简明json介绍
2008/09/28 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
详解小白之KMP算法及python实现
2019/04/04 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
军人离婚协议书样本
2014/10/21 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
简历自我评价范文
2019/04/24 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
Mysql 文件配置解析介绍
2022/05/06 MySQL
SpringBoot详解执行过程
2022/07/15 Java/Android