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 之数组的更多相关文章
-
javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
-
探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
-
编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
-
了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
-
JavaScript权威指南 - 数组
JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...
-
JavaScript常见的五种数组去重的方式
▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...
-
js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
-
javascript数组查重方法总结
文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...
-
掌握javascript中的最基础数据结构-----数组
这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...
-
小兔JS教程(四)-- 彻底攻略JS数组
在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...
随机推荐
-
Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio Android Studio 是一个Android开发环境,基于Intel ...
-
C#调用C++ Dll
现在项目基本都是旁边C++的哥们做好dll扔给我,然后我调用.好久之前晚上down了一份c#调用c++dll的方法,出处早已经遗忘.闲来无事,放上来好了.原作者看到后可以留言,我会把您链接放上的,帮了 ...
-
[转载]jquery cookie的用法
原文地址:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526663.html jQuery cookie是个很好的cookie插件 ...
-
hdu1002
//c//https://github.com/ssdutyuyang199401/hduacm/blob/master/1002.c#include<stdio.h>#include&l ...
-
Map集合。
Map集合: java.util,Map<k,v> 特点:1.键值对 2.key-value一一对应 3.key不允许重复. Map常用实现类: java.util.HashMap< ...
-
w3c JS测试
到W3c的js测试里面溜达了一圈: 做错了几道题: 外部脚本必须包含<script>标签吗? 否!! 这里的外部脚本是指xx.js这个文件,在文件中写js代码是不需要包含script标签的 ...
-
关于for in和for循环的遍历
今日看W3C的javascript教程,发现了这样的有趣的遍历方法. 第一是for in for (x in myArray) { document.write(myArray[x] + " ...
-
ubuntu 设置静态ip地址不生效问题
出现了一个问题是,配置了静态ip地址之后,重启网络服务,查看ip地址是生效的,过会再看就 不生效了,查看网上说是由于 network-manager 管理ip地址时候出现的冲突,将network-ma ...
-
分析并实现 360 P1路由器上的朋友专享网络 功能
笔者分析了360 P1路由器上的朋友专享网络功能,发现其主要由如下子功能组成: 1. APP点击“立即开启”,则路由器会多出一个新的SSID:360朋友专享网络-8463.此SSID不加密:同时,原有 ...
-
Tomcat之——内存溢出设置JAVA_OPTS
答案1设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置三.实例,以下 ...