深入了解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 相关文章推荐
介绍几个array库的新函数 php
Dec 29 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
PHP 采集获取指定网址的内容
Jan 05 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
php之curl设置超时实例
Nov 03 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
PHP 断点续传实例详解
Nov 11 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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无限分类(树形类)
2013/09/28 PHP
PHP反射API示例分享
2016/10/08 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
python圣诞树编写实例详解
2020/02/13 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
Python调用C语言程序方法解析
2020/07/07 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
《燕子专列》教学反思
2014/02/21 职场文书
班训口号大全
2014/06/18 职场文书
上诉状格式
2015/05/23 职场文书