数组是一种特殊的变量,可以在单个名称下保存多个值,您可以通过引用索引号或名称来访问这些值。

PHP数组类型

  • 索引数组 :有数字索引的数组
  • 关联数组 : 有命令键的数组
  • 多维数组 : 包含一个或多个数组的数组

数组项

数组项可以是任何数据类型。

最常见的是字符串和数字(int, float),但数组项也可以是对象、函数或甚至是数组。

同一个数组中可以有不同的数据类型。

1
$myArr = array("Volvo", 15, ["apples", "bananas"], myFunction);

数组函数

php数组最强大的地方是处在于内置的数组函数,如count()函数用于计算数组的项数

1
2
$cars = array("Volvo", "BMW", "Audi");
echo count($cars);

索引数组

php索引数组

在索引数组中,每个项目都有一个索引号

默认情况下,第一个项目的索引是0,第二个项目的索引是1,以此类推

1
2
3
$cars = array("Volvo", "BMW", "Audi");
var_dump($cars);
//创建并西安市一个索引数组

访问索引数组

要访问数组项目,可以引用索引号

1
2
3
$cars = array("Volvo", "BMW", "Audi");
echo $cars[0];
//显示第一个数组项目

更改值

使用索引号

1
2
3
4
$cars = array("Volvo", "BMW", "Audi");
$cars[2] = "BYD";
var_dump($cars);
//更改第三个的值

遍历索引数组

要遍历并且打印数组的所有值,使用foreach循环

1
2
3
4
5
$cars = array("Volvo", "BMW", "Audi");
foreach ($cars as $x) {
echo "$x <br>";
}
//显示所有数组项目

索引号

索引数组的键是一个数字,默认情况下,第一个项目是 0,第二个是 1,依此类推,但也有例外。

新项目将获得下一个索引号,即比现有最高索引高一个。

因此,如果您有这样一个数组:

1
2
3
4
5
$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Audi";
array_push($cars, "BYD");
var_dump($cars);

如果您使用 array_push() 函数添加一个新项目,新项目将获得索引 3:

但是,如果您有一个具有随机索引号的数组,如下所示:

新项目的索引为15

1
2
3
4
5
$cars[5] = "Volvo";
$cars[7] = "BMW";
$cars[14] = "Audi";
array_push($cars, "BYD");
var_dump($cars);

php关联数组

定义

分配命名键的数组

1
2
$car = array("brand"=>"Ford", "model"=>"Mustang", "year"=>1964);
var_dump($car);

访问关联数组

引用键名来访问

1
2
3
$car = array("brand"=>"Ford", "model"=>"Mustang", "year"=>1964);
echo $car["model"];
//显示汽车的型号

更改值

也使用键名来更改

1
2
3
4
$car = array("brand"=>"Ford", "model"=>"Mustang", "year"=>1964);
$car["year"] = 2024;
var_dump($car);
//更改年份项目

遍历关联数组

用foreach循环

1
2
3
4
5
$car = array("brand"=>"Ford", "model"=>"Mustang", "year"=>1964);

foreach ($car as $x => $y) {
echo "$x: $y <br>";
}

php创建数组

创建数组

使用array()函数来创建

1
$cars = array("Volvo", "BMW", "Audi");

也可以使用[] 更简洁

1
$cars = ["Volvo", "BMW", "Audi"];

数组键

在创建索引数组时,键会自动给出,从 0 开始,每个项目增加 1,因此上面的数组也可以使用键来创建

1
2
3
4
5
$cars = [
0 => "Volvo",
1 => "BMW",
2 =>"Audi"
];

如下所示,索引数组与关联数组相同,但关联数组使用名称而不是数字:

1
2
3
4
5
$myCar = [
"brand" => "BYD",
"model" => "Mustang",
"year" => 1964
];

创建空数组

可以先声明一个空数组,稍后再往后添加项目

1
2
3
4
$cars = [];
$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Audi";

对于关联数组也是如此,您可以先声明数组,然后再向其添加项目:

1
2
3
4
$myCar = [];
$myCar["brand"] = "BYD";
$myCar["model"] = "Mustang";
$myCar["year"] = 1964;

一些说明补充

换行符并不重要,声明数组可以跨越多行

1
2
3
4
5
$cars = [
"Volvo",
"BMW",
"Audi"
];

最后一个项目的逗号是允许的

1
2
3
4
5
$cars = [
"Volvo",
"BMW",
"Audi", //这里的逗号可以加
];

数组见可以混合出现,可以创建同时具有索引和命名键的数组

1
2
3
4
$myArr = [];
$myArr[0] = "apples";
$myArr[1] = "bananas";
$myArr["fruit"] = "cherries";

php访问数组

访问数组项

要访问数组项,对于索引数组,您可以引用索引号;对于关联数组,可以引用键名

1
2
3
4
5
6
$cars = array("Volvo", "BMW", "Audi");
echo $cars[2];
//通过索引号来访问一个项
$cars = array("brand" => "BYD", "model" => "Mustang", "year" => 1964);
echo $cars["year"];
//通过引用键来访问一个项

注意:第一个索引是0 关联数组使用键名

双引号和单引号

在访问数组时都可以

1
2
echo $cars["model"];
echo $cars['model'];

执行函数项

数组项可以是任何数据类型,包括函数。

要执行这样的函数,请使用索引号后跟括号 ()

1
2
3
4
5
6
7
8
function myFunction() {
echo "我来自一个函数!";
}

$myArr = array("Volvo", 15, myFunction);

$myArr[2]();
//执行一个函数项

关联函数执行函数使用键名

1
2
3
4
5
6
7
8
function myFunction() {
echo "我来自一个函数!";
}

$myArr = array("car" => "Volvo", "age" => 15, "message" => myFunction);

$myArr["message"]();
//执行一个函数

php更新数组项

更新数组项目

要更新现有的数组项,对于索引数组,您可以引用索引号;对于关联数组,您可以引用键名。

将第二个数组项从 “BMW” 更改为 “Ford”:

1
2
$cars = array("Volvo", "BMW", "Audi");
$cars[1] = "Ford";

foreach循环更新数组项

foreach 循环中更改项值时,有不同的技术可以使用。

一种方法是在赋值中插入 & 字符,按引用分配项值,从而确保在循环内部对数组项所做的任何更改都将应用于原始数组:

1
2
3
4
5
6
7
$cars = array("Volvo", "BMW", "Audi");
foreach ($cars as &$x) {
$x = "Ford";
}
unset($x);
var_dump($cars);
//将所有的项“ford”

**注意:**记得在循环后添加 unset() 函数。

如果没有 unset($x) 函数,$x 变量将保持对最后一个数组项的引用。

为了演示这一点,请查看在 foreach 循环后更改 $x 的值时会发生什么:

1
2
3
4
5
6
7
8
9
$cars = array("Volvo", "BMW", "Audi");
foreach ($cars as &$x) {
$x = "Ford";
}

$x = "ice cream";

var_dump($cars);
//演示没有使用unset()函数的后果

php添加数组项

添加数组项

要向现有数组中添加项,您可以使用括号 [] 语法。

1
2
3
$fruits = array("Apple", "Banana", "Cherry");
$fruits[] = "Orange";
//向fruits数组添加一个项

向关联数组添加请使用括号 [] 指定键,并使用 = 运算符分配值。

1
2
3
$cars = array("brand" => "Ford", "model" => "Mustang");
$cars["color"] = "Red";
//向cars数组添加一个项

添加多个项

要向现有数组添加多个项,使用array_push()函数

1
2
3
$fruits = array("Apple", "Banana", "Cherry");
array_push($fruits, "Orange", "Kiwi", "Lemon");
//向fruits数组添加三个项

向关联数组添加多个项

要向现有数组中添加多个项,您可以使用 += 运算符。

1
2
3
$cars = array("brand" => "BYD", "model" => "Mustang");
$cars += ["color" => "red", "year" => 1964];
//向cars数组添加多个项

php删除数组项

删除数组项

要从数组中删除现有项,您可以使用 array_splice() 函数。

使用 array_splice() 函数时,您需要指定索引(从哪里开始)以及要删除的项目数量。

1
2
3
$cars = array("Volvo", "BMW", "Audi");
array_splice($cars, 1, 1);
//删除第二项

注:删除后数组会自动重新索引,从0开始

使用unset函数

您还可以使用 unset() 函数来删除现有的数组项。

注意:unset() 函数不会重新排列索引,这意味着在删除后,数组将不再包含缺失的索引。

1
2
3
$cars = array("Volvo", "BMW", "Audi");
unset($cars[1]);
//删除第二项

删除多个数组项

如需删除多个项目,array_splice() 函数有一个 length 参数,允许您指定要删除的项目数量。

1
2
3
$cars = array("Volvo", "BMW", "Audi");
array_splice($cars, 1, 2);
//从第二项(索引1)开始删除两项

unset() 函数接受无限数量的参数,因此可用于删除多个数组项:

1
2
3
$cars = array("Volvo", "BMW", "Audi");
unset($cars[0], $cars[1]);
//删除第一项和第二项

删除关联数组里的项,也可以使用unset()函数

指定要删除项的键

1
2
3
$cars = array("brand" => "Ford", "model" => "Mustang", "year" => 1964);
unset($cars["model"]);
///删除“model”

使用array_diff函数

也可以用来删除关联数组里的项

1
2
3
$cars = array("brand" => "Ford", "model" => "Mustang", "year" => 1964);
$newarray = array_diff($cars, ["Mustang", 1964]);
//相当于创建一个不含有“Mustang”和“1964”的关联数组

注:array_diff函数()将值作为参数而不是键

其他

**array_pop()**函数删除最后一个

array_shift函数删除第一个项

1
2
3
4
5
6
$cars = array("Volvo", "BMW", "Audi");
array_pop($cars);
//删除最后一项
$cars = array("Volvo", "BMW", "Audi");
array_shift($cars);
删除第一项

php数组排序

升序排序

sort()函数 asort()函数 ksot()函数

1
2
3
4
5
6
7
8
9
$cars = array("Volvo", "BMW", "Audi");
sort($cars);
//按字母顺序升序排列
$age = array("Bill"=>"35", "Steve"=>"37", "Elon"=>"43");
asort($age);
//根据值对关联数组升序
$age = array("Bill"=>"35", "Steve"=>"37", "Elon"=>"43");
ksort($age);
//根据键对关联数组升序

降序排列

rsort()函数 arsort()函数 krsort()函数

1
2
3
4
5
6
7
8
9
$cars = array("Volvo", "BMW", "Audi");
rsort($cars);
//按字母顺序降序排列
$age = array("Bill"=>"35", "Steve"=>"37", "Elon"=>"43");
arsort($age);
//根据值对关联数组升序
$age = array("Bill"=>"35", "Steve"=>"37", "Elon"=>"43");
krsort($age);
//根据键对关联数组降序

php多维数组

多维数组

多维数组是一个包含一个或多个数组的数组。

PHP 支持深度为二、三、四、五或更多层的多维数组。然而,对于大多数人来说,深度超过三层的数组很难管理。

数组的维度表示选择元素所需的索引数量。

  • 对于二维数组,您需要两个索引来选择元素
  • 对于三维数组,您需要三个索引来选择元素

二维数组

二维数组是数组的数组(三维数组是数组的数组的数组)。

请看以下表格

名称 库存 已售
Volvo 22 18
BMW 15 13
Ford 5 2
Land Rover 17 15
1
2
3
4
5
6
7
$cars = array (
array("Volvo",22,18),
array("BMW",15,13),
array("Ford",5,2),
array("Land Rover",17,15)
);
//将上述表格存在一个二维数组

现在二维的 $cars 数组包含四个数组,并且它有两个索引:行和列。

要访问 $cars 数组的元素,我们必须指向两个索引(行和列):

1
2
3
4
echo $cars[0][0].": 库存:".$cars[0][1].", 已售:".$cars[0][2].".<br>";
echo $cars[1][0].": 库存:".$cars[1][1].", 已售:".$cars[1][2].".<br>";
echo $cars[2][0].": 库存:".$cars[2][1].", 已售:".$cars[2][2].".<br>";
echo $cars[3][0].": 库存:".$cars[3][1].", 已售:".$cars[3][2].".<br>";

我们还可以在另一个 for 循环内部放置一个 for 循环来获取 $cars 数组的元素(我们仍然需要指向两个索引):

1
2
3
4
5
6
7
8
for ($row = 0; $row < 4; $row++) {
echo "<p><b>行号 $row</b></p>";
echo "<ul>";
for ($col = 0; $col < 3; $col++) {
echo "<li>".$cars[$row][$col]."</li>";
}
echo "</ul>";
}

php数组函数

PHP 提供了一组内置函数,可用于操作数组。

[详情请看](PHP 数组函数)