PHP数组实际上是一个有序映射。映射是将值与键关联的类型。这种类型可以认为是数组、列表(矢量)、哈希表(实现地图)、字典、集合、堆栈、队列等,对各种用途进行了优化。数组的值可以是其他数组,因此也允许树结构和多维数组。
语法
数组定义array()
可以使用array()语言结构创建数组。接受逗号分隔的任意数量的键=>值对。
array(
key => value,
key2 => value2,
key3 => value3,
...
)
可以省略最后一个数组元素后面的逗号。通常用于单行数组定义。例如,array(1,2)通常代替array(1,2,)。最后一个逗号通常保留用于多行数组定义,在添加新单元格时非常有用。
注意:
可以使用短数组语法[]代替array()。
示例1简单数组:
<?php $array = array( "foo" => "bar", "bar" => "foo", ); // 使用短数组语法 $array = [ "foo" => "bar", "bar" => "foo", ]; ?>
key是整数或字符串。值可以是任何类型。
此外,key具有以下强制条件:
字符串包含有效的十进制整型,除非数字前面有+符号,否则将转换为整型。例如,键名“8”实际上保存为8。此外,“08”不是有效的十进制整数,因此不强制执行。
浮点也将转换为int。也就是说,小数部分被四舍五入。例如,键名8.7实际上存储为8。
布尔也将转换为整型。也就是说,密钥名true实际上存储为1,而密钥名false存储为0。
空值将转换为空字符串。也就是说,密钥名称null实际上存储为“”。
数组和对象不能用作关键帧。如果这样做过多,则会出现以下警告:Illegal offsettype。
如果多个元素在定义数组时使用相同的关键字名称,则只使用最后一个元素,并覆盖其他元素。
实例#2类型转换和覆盖示例:
<?php $array = array( 1 => "a", "1" => "b", 1.5 => "c", true => "d", ); var_dump($array); ?>
输出以上例程:
array(1) {
[1]=>
string(1) "d"
}
上面示例中的所有键名都强制为1,因此每个新单元格都将覆盖以前的值,最后只剩下“d”。
因为PHP实际上不区分带索引的数组和联想数组,所以PHP数组可以同时包含int键和string键。
示例3int和字符串密钥名混合:
<?php $array = array( "foo" => "bar", "bar" => "foo", 100 => -100, -100 => 100, ); var_dump($array); ?>
输出以上例程:
array(4) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
[100]=>
int(-100)
[-100]=>
int(100)
}
键是可选的。否则,PHP将自动将以前使用的最大int键加1后的值用作新键。
示例4没有关键字名称的索引数组:
<?php $array = array("foo", "bar", "hello", "world"); var_dump($array); ?>
输出以上例程:
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hello"
[3]=>
string(5) "world"
}
也可以仅为某些单元格指定键名,并将其他单元格留空。
示例5仅为某些单元格指定密钥名称:
<?php $array = array( "a", "b", 6 => "c", "d", ); var_dump($array); ?>
输出以上例程:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
最后一个值“d”显示自动分配键名7。这是因为以前的最大整数密钥名为6。
实例#6复合类型转换和覆盖示例。
此示例包括键名类型转换和元素覆盖的所有更改。
<?php $array = array( 1 => 'a', '1' => 'b', // 值 "a" 会被 "b" 覆盖 1.5 => 'c', // 值 "b" 会被 "c" 覆盖 -1 => 'd', '01' => 'e', // 由于这不是整数字符串,因此不会覆盖键名 1 '1.5' => 'f', // 由于这不是整数字符串,因此不会覆盖键名 1 true => 'g', // 值 "c" 会被 "g" 覆盖 false => 'h', '' => 'i', null => 'j', // 值 "i" 会被 "j" 覆盖 'k', // 值 “k” 的键名被分配为 2。这是因为之前最大的整数键是 1 2 => 'l', // 值 "k" 会被 "l" 覆盖 ); var_dump($array); ?>
输出以上例程:
array(7) {
[1]=>
string(1) "g"
[-1]=>
string(1) "d"
["01"]=>
string(1) "e"
["1.5"]=>
string(1) "f"
[0]=>
string(1) "h"
[""]=>
string(1) "j"
[2]=>
string(1) "l"
}