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 页面执行时间计算代码
Dec 04 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 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
PHP之数组学习
2011/05/29 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
jquery 时间戳转日期过程详解
2019/10/12 jQuery
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
Python、Javascript中的闭包比较
2015/02/04 Python
python决策树之CART分类回归树详解
2017/12/20 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
学习python需要有编程基础吗
2020/06/02 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
银行演讲稿范文
2014/01/03 职场文书
双创工作实施方案
2014/03/26 职场文书
大专毕业生求职信
2014/07/05 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript