Skip to content

PHP 数组

数组是 PHP 中的一种基本数据结构,它允许您将多个值存储在单个变量中。

想象一下需要存储一个汽车名称列表。如果没有数组,您可能会这样做:

<?php
$car1 = "Volvo";
$car2 = "BMW";
$car3 = "Toyota";
?>

如果您有数百辆汽车或者需要对列表执行操作(如搜索或排序),这就会变得不切实际。数组解决了这个问题。

<?php
// 使用现代短数组语法 []
$cars = ["Volvo", "BMW", "Toyota"];
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
// Output: I like Volvo, BMW and Toyota.
?>

数组是一种有序映射 (ordered map)。映射是一种将值关联到键的类型。PHP 数组非常灵活:

  • 它们可以存储不同类型的值(整数、字符串、布尔值、对象,甚至其他数组)。
  • 键可以是整数(用于索引数组)或字符串(用于关联数组)。
  • 它们是动态的,这意味着您可以轻松添加或移除元素。

创建数组的现代和推荐方法是使用短数组语法 []。较旧的 array() 语法仍然有效,但在新代码中不太常见。

PHP 支持几种类型的数组:

  • 索引数组 (Indexed arrays): 键为数字(通常从 0 开始)的数组。
  • 关联数组 (Associative arrays): 键为命名字符串的数组。
  • 多维数组 (Multidimensional arrays): 包含其他数组的数组。

键被自动分配为整数,从 0 开始。

<?php
// 自动索引(从 0 开始)
$cars = ["Volvo", "BMW", "Toyota"];
echo $cars[0]; // Output: Volvo
echo $cars[1]; // Output: BMW
// 您也可以手动分配索引(对于顺序列表不太常见)
$colors = [];
$colors[0] = "Red";
$colors[1] = "Green";
$colors[2] = "Blue";
echo $colors[1]; // Output: Green
?>

使用命名的字符串键来访问值。这对于表示结构化数据(如记录或字典)非常有用。

<?php
// 使用字符串键
$age = [
"Peter" => 35,
"Ben" => 37,
"Joe" => 43
];
echo "Peter is " . $age["Peter"] . " years old."; // Output: Peter is 35 years old.
// 另一种赋值方式
$config = [];
$config['database'] = 'my_db';
$config['user'] = 'admin';
echo $config['database']; // Output: my_db
?>

count() 函数返回数组中的元素数量。

<?php
$cars = ["Volvo", "BMW", "Toyota"];
echo count($cars); // Output: 3
$age = ["Peter" => 35, "Ben" => 37, "Joe" => 43];
echo count($age); // Output: 3
?>

索引数组(使用 for 循环):

当您需要索引号时很有用。

<?php
$cars = ["Volvo", "BMW", "Toyota"];
$arrlength = count($cars);
for ($x = 0; $x < $arrlength; $x++) {
echo "Car index $x: " . $cars[$x] . "<br>";
}
?>

索引数组和关联数组(使用 foreach 循环):

foreach 循环通常更受欢迎,因为它更简单,并且可以无缝地处理索引数组和关联数组。

<?php
// 遍历索引数组(只获取值)
$colors = ["Red", "Green", "Blue"];
foreach ($colors as $color) {
echo "Color: $color <br>";
}
// 遍历关联数组(获取键和值)
$age = ["Peter" => 35, "Ben" => 37, "Joe" => 43];
foreach ($age as $name => $years) {
echo "$name is $years years old.<br>";
}
?>

数组可以包含其他数组,创建多维结构,这对于表示表格或矩阵非常有用。

<?php
$users = [
["name" => "Peter", "email" => "peter@example.com", "active" => true],
["name" => "Ben", "email" => "ben@example.com", "active" => false],
["name" => "Joe", "email" => "joe@example.com", "active" => true]
];
// 访问元素
echo $users[0]["name"]; // Output: Peter
echo $users[1]["email"]; // Output: ben@example.com
// 遍历多维数组
foreach ($users as $user) {
echo "User: " . $user["name"] . ", Email: " . $user["email"] . "<br>";
}
?>

PHP 提供了一系列丰富的函数来操作数组:

  • array_push($array, $value1, …) 或 $array[] = $value: 在末尾添加元素。
  • unset($array[$key]): 移除元素。
  • in_array($needle, $haystack): 检查值是否存在。
  • array_key_exists($key, $array): 检查键是否存在。
  • array_merge($array1, $array2, …): 合并数组。
  • array_keys($array): 获取所有键。
  • array_values($array): 获取所有值。
  • sort($array), rsort($array), asort($array), ksort($array) 等: 各种排序函数。

查阅官方 PHP 文档以获取完整列表和示例。