PHP 第二节 数据类型之数组


Posted in PHP onApril 28, 2012

PHP 中的 数组 实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组元素的值也可以是另一个数组。树形结构和多维数组也是允许的。

可以用 array() 语言结构来新建一个 array。它接受任意数量用逗号分隔的 键(key) => 值(value) 对。

key 可以是 integer 或者 string。如果key是一个 integer 的标准表示,则被解释为整数(例如 "8" 将被解释为 8,而 "08" 将被解释为 "08")。key 中的浮点数被取整为 integer。在 PHP 中索引数组与关联数组是相同的,它们都可以同时包含整型字符串的下标。

值可以是任意的 PHP 类型。

如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。

使用 TRUE 作为键名将使 integer 1 成为键名。使用 FALSE 作为键名将使 integer 0 成为键名。使用 NULL 作为键名将等同于使用空字符串。使用空字符串作为键名将新建(或覆盖)一个用空字符串作为键名的值,这和用空的方括号不一样。

不能用数组和对象作为键(key)。这样做会导致一个警告:Illegal offset type

用方括号的语法新建/修改

如果 $arr 还不存在,将会新建一个。这也是一种定义数组的替换方法。要改变一个值,只要给它赋一个新值。如果要删除一个键名/值对,要对它用 unset()

Note:如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值 + 1。如果当前还没有整数索引,则键名将为 0。如果指定的键名已经有值了,该值将被覆盖。

注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。

应该始终在用字符串表示的数组索引上加上引号。例如用 $foo['bar'] 而不是 $foo[bar]。但是为什么 $foo[bar] 错了呢?

原因是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。它能运行,是因为 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。例如,如果没有常量定义为 bar,PHP 将把它替代为 'bar' 并使用之。

PHP 相关文章推荐
php 图片加水印与上传图片加水印php类
May 12 PHP
10条PHP高级技巧[修正版]
Aug 02 PHP
php实现加减法验证码代码
Feb 14 PHP
php对称加密算法示例
May 07 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
解决php extension 加载顺序问题
Aug 16 PHP
php实现对文件压缩简单的方法
Sep 29 PHP
关于laravel框架中的常用目录路径函数
Oct 23 PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 #PHP
PHP 第二节 数据类型之数值型
Apr 28 #PHP
PHP 第一节 php简介
Apr 28 #PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 #PHP
php实现rc4加密算法代码
Apr 25 #PHP
PHP filter_var() 函数 Filter 函数
Apr 25 #PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 #PHP
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
PHP多个版本的分析解释
2011/07/21 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
php比较相似字符串的方法
2015/06/05 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
浅析Python基础-流程控制
2016/03/18 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python实现flappy bird游戏
2018/12/24 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python能做什么 python的含义
2019/10/12 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
python中count函数简单的实例讲解
2020/02/06 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
捐助贫困学生倡议书
2014/05/16 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
个人剖析材料范文
2014/09/30 职场文书
运动会入场词
2015/07/18 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书