PHP数组是“键值对”的概念,即使形如[“one”,”two”,”three”]的数组实质上也是键值对,类似于Java Map,而且比Java更加灵活。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
1.数组定义
1.1简单定义
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 自 PHP 5.4 起
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
key 可以是 integer 或者 string。value 可以是任意类型。
以下是key的几个注意点:
- 包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。
- 但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为8。
- 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
- Null会被转换为空字符串,即键名null 实际会被储存为 “”。
1.2混合类型键
key的类型覆盖例子:
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
上述代码结果:
array(1) {
[1]=>
string(1) "d"
}
这是因为几个键全被PHP理解成整形1,被最后一项覆盖。
key混合integer和string类型例子:
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
?>
简单。
仅指定部分键名例子:
<?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"
}
6之后的键直接变为7,这是因为 key 为可选项。如果未指定,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。最后一个值 “d” 被自动赋予了键名 7。这是由于之前最大的整数键名是 6。
多维数组例子:
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
访问:
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
2.数组函数
http://php.net/manual/zh/ref.array.php这个网站写的非常详细。
以下是几个常用的
判断是否是个数组:
is_array( mixed $var)
如果 var 是 array,则返回 TRUE,否则返回 FALSE。
判断键是否存在:
bool array_key_exists ( mixed $key , array $search )
array_key_exists() 在给定的 key 存在于数组中时返回 TRUE。key 可以是任何能作为数组索引的值。array_key_exists() 也可用于对象。
检查数组中是否存在某个值:
bool in_array ( mixed $needle , array $haystack )
删除某个value(不会重建索引)
unset($arr[2]);
unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。
初学PHP理解PHP数组,之后还会继续补充。