深入了解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_connect与mysql_pconncet的区别详解
May 15 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
Jan 09 PHP
PHP如何将XML转成数组
Apr 04 PHP
php简单压缩css样式示例
Sep 22 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 PHP
PHP token验证生成原理实例分析
Jun 05 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/05/22 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
javascript中length属性的探索
2011/07/31 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
JavaScript多线程详解
2015/08/12 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python数据操作方法封装类实例
2017/06/23 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Django如何重置migration的几种情景
2021/02/24 Python
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
秋季运动会通讯稿
2014/01/24 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫