深入了解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连mysql和oracle数据库性能比较
Oct 09 PHP
PHP开启gzip页面压缩实例代码
Mar 11 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
PHP将XML转数组过程详解
Nov 13 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
PHP isset()及empty()用法区别详解
Aug 29 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实现基于栈的后缀表达式求值功能
2017/11/10 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
jQuery实现的放大镜效果示例
2016/09/13 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
python字典多条件排序方法实例
2014/06/30 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
python函数与方法的区别总结
2019/06/23 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
中职生自荐信
2013/10/13 职场文书
大学生就业意向书范文
2014/04/01 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL