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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
一篇不错的PHP基础学习笔记
Mar 18 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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+Mysql无限分类的方法汇总
2015/03/02 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
Python 文件操作实现代码
2009/10/07 Python
python中对list去重的多种方法
2014/09/18 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
Python3最长回文子串算法示例
2019/03/04 Python
python中的print()输出
2019/04/12 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
婚纱摄影师求职信
2014/03/07 职场文书
二年级学生评语大全
2014/04/23 职场文书
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android