定义
php中的数组是一个有序的映射,可以用来表示数组,列表(向量),哈希表,字典, 集合,堆栈,队列等
array(
key => value,
key2 => value2,
key3 => value3,
...
)
- 每个item后需要接一个,号, 如果是单行数组的定义最后一个,号可以省略
array(1,2)
- 可以使用短数组语法
[]
来代替array()
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
$array = [
"foo" => "bar",
"bar" => "foo",
];
key和value
key可以是integer或者string, value可以是任意类型
key值被强制转化
- string中包含有效的十进制int,除非数字前面有一个+号,否则会转化为int整形,如"8"会被转化成8
- Float也会被转化成int, 小数部分会被舍去, 如 8.7会被转化成8
- Bool也会被转化成int, 如true会被转化为1 false会被转化成为0
- Null 会被转化成空字符串,如null 会转化为""
- array和object不能被用于键名
如果定义的时候使用了相同的键名,之前会被覆盖
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
输出
array(1) {
[1]=>
string(1) "d"
}
访问数组单元
使用方括号语法访问 array[key]
注意 php8.0之前 还可以使用花括号来访问数组单元
array{key}
添加元素
- 可以使用
array[]
来添加新的元素,会取当前最大的Int索引值,新的键名将在该值 加上1
$array = ['a','b'];
$array[] = 'c';
var_dump($array);
输出
array (size=3)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
如果没有int索引,则键名将为0
$array1 = [
'a' => '1',
'b' => '2',
];
$array1[] = 'c';
var_dump($array1);
输出
array (size=3)
'a' => string '1' (length=1)
'b' => string '2' (length=1)
0 => string 'c' (length=1)
- 使用array_push方法
如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
可以将一个或多个单元压入数组的未尾
array_push(array &$array, mixed $value1, mixed $... = ?): int
数组解包
使用 [](自 PHP 7.1.0 起)或者 list() 语言结构解包数组,把数组中的元素转化成不同的变量
<?php
$source_array = ['foo', 'bar', 'baz'];
[$foo, $bar, $baz] = $source_array;
echo $foo; // 打印 "foo"
echo $bar; // 打印 "bar"
echo $baz; // 打印 "baz"
?>
可以使用foreach进行多维数组解包
<?php
$source_array = [
[1, 'John'],
[2, 'Jane'],
];
foreach ($source_array as [$id, $name]) {
// 这里是 $id 和 $name 的逻辑
}
?>
修改,删除元素
遍历数组
要修改某个值,通过其键名给该单元赋一个新值。要删除某键值对,对其调用 unset() 函数。
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // 这与 $arr[13] = 56 相同;
// 在脚本的这一点上
$arr["x"] = 42; // 添加一个新元素
// 键名使用 "x"
unset($arr[5]); // 从数组中删除元素
unset($arr); // 删除整个数组
?>
关联数组和索引数组
关联数组在对应json的object, 索引数组对应array
关联数组
<?php
$cars=array("a"=>"Volvo","b"=>"BMW","c"=>"SAAB");
var_dump($cars);
?>
索引数组
<?php
$cars=array("Volvo","BMW","SAAB");
var_dump($cars);
?>