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

语法

定义数组array()

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

键key可以是一个整数integer或字符串string

值value可以是任意类型的值

自5.4起可以使用短数组定义语法,用[]替代array()。

此外key会有如下的强制转换:

  • 包含有合法整型值的字符串会被转换为整型。例如”8“实际会被存储为8.但是”08“则不会强制转换,因为其不是一个合法的十进制数值。
  • 浮点数也会被转换为整型,意味着其小数部分会被舍去。
  • 布尔值也会被转换为整型。即键名true实际会被存储为1而键名false会被存储为0。
  • Null会被转换为空字符串,即键名null实际会被储存为”“。
  • 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

PHP数组可以同时含有integer和string类型的键名,因为PHP实际并不区分索引数组和关联数组。如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。

方括号和花括号可以互换使用来访问数组单元。

自PHP5.4起可以用直接对函数或方法调用的结果进行数组解引用,在此之前只能通过一个临时变量。

自PHP5.5起可以直接对一个数组原型进行数组解引用。

Note:试图访问一个未定义的数组键名与访问任何未定义变量一样,会导致E_NOTICE级别错误信息,其结果为NULL。

Note:如果给出方括号但是没有指定键名,则取当前最大整数索引值,新的键名将是该值加上1(但是最小为0)。如果当前还没有整数索引,则键名将为0.

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

实用函数:

Note:unset()函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用array_values()函数。

要删除某键值对,对其调用unset()函数,重新索引array_values()函数。

当打开error_reporting来显示E_NOTICE级别的错误(将其设为E_ALL)时将看到这些错误。默认情况下error_reporting被关闭不显示这些。

Note:在双引号字符串中,不给索引加上引号是合法的因此“$foo[bar]”是合法的(“合法"的原文为valid。在实际测试中,这么做确实可以访问数组的该元素,但是会报一个常量未定义的notice。无论如何,强烈建议不要使用$foo[bar]这样的写法,而要使用$foo['bar']来访问数组中元素)。

转换为数组

对于任意integer,float,string,boolean和resource类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为0,该元素即为此标量的值。换句话说,(array)$scalarValue与array($scalarValue)完全一样。

如果一个object类型转换为array,则结果为一个数组,其单元为该对象的属性。键名将成为变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个'*'做前缀。这些前缀的前后都各有一个NULL字符。

将NULL转换为array会得到一个空的数组。

数组(Array)的赋值总是会涉及到值的拷贝。使用引用运算符通过引用来拷贝数组。

PHP Array数组的更多相关文章

  1. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  2. JavaScript的json和Array及Array数组的使用方法

    1.关于json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集.也可以称为数据集和数组类似,能够存数据! //Ar ...

  3. iOS -Swift 3.0 -Array(数组与可变数组相关属性及用法)

    // // ViewController.swift // Swift-Array // // Created by luorende on 16/9/12. // Copyright © 2016年 ...

  4. 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量

    多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...

  5. c++中的array数组和vector数组

    我觉得实验一下会记得比较牢,话不多直接上代码. 下面是array数组,感觉用的不多. //cpp 风格数组 array #include <iostream> #include <a ...

  6. Java Script基础(八) Array数组对象

    一.Array数组 JavaScript中的数组也是具有相同数据类型的一个或者多个值得集合.用法和Java中的数组类似. Array对象的常用属性和方法: 属性: length:获取数组的长度: 方法 ...

  7. JavaScript string array 数组

    Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); -------- ...

  8. php中foreach()函数与Array数组经典案例讲解

    //php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...

  9. Javascript进阶篇——( JavaScript内置对象---下)--Array数组对象---笔记整理

    Array 数组对象数组对象是一个对象的集合,里边的对象可以是不同类型的.数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置,是从零开始的数组定义的方法: 1. 定义了一个空数组: var ...

  10. js Array数组的使用

    js Array数组的使用   Array是javascript中的一个事先定义好的对象(也可以称作一个类),可以直接使用 创建Array对象 var array=new Array(): 创建指定元 ...

随机推荐

  1. 模板层语法、模板层之标签、模板的继承与导入、模型层之ORM常见关键字

    模板层语法.模板层之标签.模板的继承与导入.模型层之ORM常见关键字 一.模板层语法 1.模板语法的传值 urls代码: path('modal/', views.modal) views代码: de ...

  2. 字符编码,存储引擎及MySQL字段类型相关知识点

    字符编码,存储引擎及MySQL字段类型相关知识点 一.字符编码 1.在终端输入\s,查看数据库的基本信息(当前用户,版本,编码,端口号) 2.默认的配置文件是my-default.ini 拷贝上述的文 ...

  3. java的部分特性与下载安装

    Java Java的特性与优势 简单性:C++语法纯净版,没有头文件没有指针运算 面向对象:程序设计技术,重点放在对象与对象接口上,用人的思维方式去写程序,万物皆对象 可移植性:跨平台性,可以跨平台移 ...

  4. 我们从 CircleCI 安全事件获得的3个经验教训

    CircleCI 作为业内最受欢迎的 CI/CD 平台提供商之一,有超过20万个 DevOps 团队使用其平台.该公司在今年1月在其官网报告了一起安全事件引起客户恐慌.在此事件中,有身份不明的恶意攻击 ...

  5. 解决:ChatGPT too many requests in 1 hour.Try again later 怎么办?OpenAI 提示

    ChatGPT 提示: Too many requests in 1 hour. Try again later. 如下图,我多次访问也出现同样的问题.中文意思是太多的请求数量在当前 1 个小时内,请 ...

  6. Spring6 DI 依赖注入--Bean属性赋值

    Spring6基于XML实现Bean 管理(属性赋值) IOC和DI有什么区别:DI是IOC中的具体实现,DI表示依赖注入或注入属性,注入属性要在创建对象的基础之上完成 依赖注入方法 bean属性赋值 ...

  7. ps抠图小技巧

    1.背景橡皮擦工具 适合分离单一背景. 中括号键可以调整大小. 2.调整边缘抠图(也叫选择并遮住) 适合扣毛发丝. 套索工具框选出大概: 点击选择并遮住后出来一个面板: 视图选择叠加,输出设置勾上净化 ...

  8. HACLABS: NO_NAME

    HACLABS: NO_NAME 目录 HACLABS: NO_NAME 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 命令注入利用 2.1 尝试反弹Shell 2. ...

  9. Linux命令-用户、权限管理

      Linux命令-用户.权限管理 用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理. 在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个 ...

  10. [EULAR文摘] 在总人群中监测ACPA能否预测早期关节炎

    标签: 类风湿关节炎; 抗CCP抗体; 预测因子; 病程演变 在总人群中监测ACPA能否预测早期关节炎 Verstappen SM, et al. EULAR 2015. Present ID: OP ...