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()此时覆盖掉前面相同键名的值。
来源:https://www.cnblogs.com/2018-05-9-ygk/p/9365683.html