Skip to content

PHP 多维数组

到目前为止,我们讨论的数组都是单层的键/值对列表。

然而,PHP 允许你创建包含其他数组的数组,这使得你可以以多维方式组织数据。

这些被称为多维数组(multidimensional arrays)。

多维数组本质上是一种数组,其中每个元素本身也可以是一个数组。你可以将其想象成一张表格(二维数组)甚至是一个数据立方体(三维数组)。

PHP 支持具有多个嵌套层级的数组。然而,超过两或三层嵌套的数组可能会变得复杂,难以管理和理解。

| | 可以将维度想象为定位某个值所需的坐标。

  • 一维数组 需要一个索引(例如,$myArray[5])。
  • 二维数组 需要两个索引(例如,$myGrid[2][3])。
  • 三维数组 需要三个索引(例如,$myCube[1][4][0])。 | | --- | --- |

最常见的多维数组类型是二维数组,它就像一个数组的数组。它非常适合表示通常在表格中找到的数据。

考虑这个汽车库存表格:

名称库存已售
Volvo2218
BMW1513
Saab52
Land Rover1715

我们可以使用现代 PHP 语法将这些数据存储在二维数组中:

// Using modern short array syntax [] $cars = [ [“Volvo”, 22, 18], [“BMW”, 15, 13], [“Saab”, 5, 2], [“Land Rover”, 17, 15] ];

$cars 数组现在包含四个内部数组。要访问特定数据,你需要两个索引:第一个用于行(外部数组索引),第二个用于列(内部数组索引)。

访问元素:

<?php
// Modern array syntax
$cars = [
["Volvo", 22, 18],
["BMW", 15, 13],
["Saab", 5, 2],
["Land Rover", 17, 15]
];
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>";
// Example Output:
// Volvo: In stock: 22, sold: 18.
// BMW: In stock: 15, sold: 13.
// Saab: In stock: 5, sold: 2.
// Land Rover: In stock: 17, sold: 15.
?>

遍历多维数组:

使用嵌套的 foreach 循环通常是迭代多维数组最易读的方式:

<?php
$cars = [
["Volvo", 22, 18],
["BMW", 15, 13],
["Saab", 5, 2],
["Land Rover", 17, 15]
];
echo "<h2>汽车库存详情:</h2>";
foreach ($cars as $index => $car) {
echo "<p>**汽车 #" . ($index + 1) . "**</p>";
echo "<ul>";
echo "<li>名称:" . $car[0] . "</li>";
echo "<li>库存:" . $car[1] . "</li>";
echo "<li>已售:" . $car[2] . "</li>";
echo "</ul>";
}
?>

你也可以使用关联键(associative keys)来提高可读性,尤其是在处理结构化数据时:

<?php
$carData = [
'Volvo' => ['stock' => 22, 'sold' => 18],
'BMW' => ['stock' => 15, 'sold' => 13],
'Saab' => ['stock' => 5, 'sold' => 2],
'Land Rover' => ['stock' => 17, 'sold' => 15]
];
echo "<h2>汽车库存(关联数组):</h2>";
foreach ($carData as $name => $data) {
echo "<p>**" . htmlspecialchars($name) . "**</p>";
echo "<ul>";
echo "<li>库存:" . htmlspecialchars($data['stock']) . "</li>";
echo "<li>已售:" . htmlspecialchars($data['sold']) . "</li>";
echo "</ul>";
}
?>

多维数组对于存储结构化数据非常有用,例如:

  • 配置设置
  • 矩阵或网格数据(如电子表格或游戏棋盘)
  • 从数据库获取的分组数据(例如用户及其帖子)
  • 表示复杂的关系