PHP之array数组

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

解释这些结构超出了本手册的范围,但对于每种结构至少会提供一个例子。要得到这些结构的更多信息,
建议参考有关次广阔主题的其它著作。

语法

定义数组array()

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

array( key => value
....
)

// 键(key)可以是一个整数integer 或者字符串string
// 值(value) 可以是任意类型的值

最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1,2)而不是array(1,2,).对多行
数组定义通常保留最后的一个逗号,这样要添加一个新单元时更方便。

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

php之数组的key可以是integer或者string。value可以是任意类型。

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

①、包含有合法整型值的字符串会被转换为整型。例如键名:“8” 实际会被存储为8.但是“08"则不会强制转换,
因为不是一个合法的十进制数值。

②、浮点数也会被转化为整型,意味着其小数部分会被舍去。例如键名8.7实际会被存储为8.
③、布尔值也会被转换成整型。即键名true实际会被存储为1,而键名false存储为0.
④、null 会被转换为空字符串,即键名null实际会被存储为""。
⑤、数组和对象不能被用作键名,坚持这么做会导致:illegal offset type.

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

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

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

数组解引用

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

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

可以通过明示地设定其中的值来修改一个已有的数组。
这是通过在方括号内指定键名来给数组赋值实现的。也可以省略键名,在这种情况下给变量名加上一对空的方括号([])
$arr[$key] = value;
$arr[] = value;

//key 可以使integer或者string。
//value 可以是任意类型的值。

如果$arr 还不存在,将会新建一个,这也是另一种新建数组的方法。不过并不鼓励这样做。
因为如果$arr 已经包含有值,则次值会保留而[]实际上代表着字符串访问运算符。初始化变量的最好方式是直接给其赋值。

要修改某个值,通过其键名给该单元附一个新值。要删除某个键值对,对其调用unset()函数。

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

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

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

为什么$foo[bar]错了?????

应该始终在用字符串表示的数组索引上加上引号。
Note:这并不是意味着总是给键名加上引号。用不着给键名为常量或者变量的加上引号,否则会使PHP不能解析它们。

转换为数组

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

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

将null转化为array会得到一个空数组。

请注意,如果您在$ _POST数组中使用字符串作为索引,那么这些句点将转换为下划线

PHP之数组运算符

数组运算符

例子 名称 结果
$a + $b 联合 $a 和 $b的联合。
$a == $b 相等 如果$a和$b具有相同的键/值对则为true。
$a === $b 全等 如果$a和$b具有相同的键/值对并且顺序和类型相同则为true。
$a != $b 不等 如果$a不等于$b则为true。
$a <> $b 不等 如果$a不等于$b则为true。
$a !== $b 不全等 如果$a 不全等于 $b 则为true。

  • 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

数组中的单元如果具有相同的键名和值则比较时相等。

数组操作符 === 等于true的情况

两个数组的键值对分别相等。而且数组中的元素顺序相同。

PHP之+号运算符,加号运算符只能操作数组

例如: $c = $a + $b;
如果$a 和 $b有一个不是数组,PHP回报fatal error。

注意PHP之+号运算符,加号运算符只能操作数组
the + operator appends the right elements in the array from left,whereas duplicated keys are not overwritten
这句话的意思是如果两个元素的键名相同,保留+号运算符左边的键对应的值,而不是右边键对应的值覆盖左边键对应的值。

PHP之+号合并数组和array_merge的区别????

区别是:
①、当数组是索引数组时,array_merge()不会覆盖掉原来的值,但+号合并数组则会最先出现的值作为最终的结果返回,
而把后面的数组拥有的那些值“抛弃掉”(不是覆盖)。
②、当下标为字符时,+号任然把最先出现的值作为最结果返回,而把后面的数组拥有的相同键名的那些值“抛弃掉”,
但arra_merge()此时覆盖掉前面相同键名的值。

php 之数组的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

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

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

  5. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  6. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  7. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  8. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

  9. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  10. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

随机推荐

  1. EasyUI - DataGrid 去右边空白滚动条列

    在网上查了很长时间没有找到解决方法,干脆自已查看一下代码来解决吧,随是压缩过的,不过也还是好查的,工夫不负有心人,终于解决了,方法如下: 一.我们先让表格自适应宽度 <!DOCTYPE html ...

  2. vue的双向绑定

    1.效果 点击+-修改数量,金额跟着一起变动 2.index.html <!DOCTYPE html> <html lang="en"> <head& ...

  3. linux每日命令(10):touch命令

    linux的touch命令一般用来修改文件时间戳,或者新建一个不存在的文件. 一.命令格式: touch [参数]... 文件... 二.命令参数: 参数 描述 -a 或--time=atime或-- ...

  4. django admin upload 上传图片到oss Django Aliyun OSS2 Storage

    https://github.com/xiewenya/django-aliyun-oss2-storage Install pip install django-aliyun-oss2-storag ...

  5. php5.6-lumen与php5.6-phalcon性能对比

    场景一: 两个框架简单输出helloworld phalcon:{QPS:7349,平均响应时间:124.11ms},lumen{QPS:1327,平均响应时间:721.54ms} QPS: phal ...

  6. 关于批判性思维(Critical Thinking)

    批判性思维(CriticalThinking)就是通过一定的标准评价思维,进而改善思维,是合理的.反思性的思维,既是思维技能,也是思维倾向. 批判性思维是在普通思维的基础上又加了第二层思考,并对第一层 ...

  7. npm WARN unmet dependency错误解决方法

    在MAC上安装webpack以及reactjs等其它组件时,安装太慢卡住不动,直接ctrl+c终止后,再npm install后出npm WARN unmet dependency错误,npm cac ...

  8. Oracle DBA神器之Toad

    很早就听说Toad功能很强大,一直没有使用过,因为PLSQL Developer就很好用.前几天看见同事优化Oracle就是用的Toad,有一些很强大的管理功能,于是再一次对Toad产生兴趣,收集了一 ...

  9. db2 索引

    索引:可通过 SYSCAT.INDEXES JOIN SYSCAT.INDEXCOLUSE来查询索引的字段有升序ASC和降序DESC,分别表示为SYSCAT.INDEXES的COLNAMES中索引字段 ...

  10. "佛祖保佑 永无bug" 注释模板设置详解(仅供娱乐)

    1.注释模板效果图 今天在网上看到一段有趣的注释,佛祖保佑 永无bug, 效果如下图所示:  代码如下所示: /** * _ooOoo_ * o8888888o * 88" . " ...