Appearance
第 7 章:数组(PHP 最常用数据结构)
7.1 索引数组 + 关联数组
索引数组
索引数组是最基本的数组类型,使用数字作为键名。
php
<?php
// 方法1:使用 array() 函数
$fruits = array("苹果", "香蕉", "橙子", "葡萄");
// 方法2:使用短语法(推荐)
$fruits = ["苹果", "香蕉", "橙子", "葡萄"];
// 访问数组元素
echo $fruits[0]; // 输出 "苹果"
echo $fruits[1]; // 输出 "香蕉"
// 修改数组元素
$fruits[2] = "柚子";
// 添加新元素
$fruits[] = "草莓";
?>关联数组
关联数组使用字符串作为键名,更具可读性。
php
<?php
// 方法1:使用 array() 函数
$person = array(
"name" => "张三",
"age" => 25,
"email" => "zhangsan@example.com"
);
// 方法2:使用短语法(推荐)
$person = [
"name" => "张三",
"age" => 25,
"email" => "zhangsan@example.com"
];
// 访问数组元素
echo $person["name"]; // 输出 "张三"
echo $person["age"]; // 输出 25
// 修改数组元素
$person["email"] = "zhangsan@new.com";
// 添加新元素
$person["phone"] = "13800138000";
?>7.2 二维数组、多维数组
二维数组
二维数组是数组的数组,常用于表示表格数据。
php
<?php
// 二维索引数组
$students = [
["张三", 18, "男"],
["李四", 19, "女"],
["王五", 20, "男"]
];
// 访问二维数组元素
echo $students[0][0]; // 输出 "张三"
echo $students[1][1]; // 输出 19
// 二维关联数组
$students = [
[
"name" => "张三",
"age" => 18,
"gender" => "男"
],
[
"name" => "李四",
"age" => 19,
"gender" => "女"
],
[
"name" => "王五",
"age" => 20,
"gender" => "男"
]
];
// 访问二维关联数组元素
echo $students[0]["name"]; // 输出 "张三"
echo $students[1]["age"]; // 输出 19
?>多维数组
多维数组是包含多个维度的数组,结构更复杂。
php
<?php
// 多维数组示例:学生成绩
$scores = [
"张三" => [
"语文" => 90,
"数学" => 85,
"英语" => 95
],
"李四" => [
"语文" => 88,
"数学" => 92,
"英语" => 80
]
];
// 访问多维数组元素
echo $scores["张三"]["数学"]; // 输出 85
echo $scores["李四"]["英语"]; // 输出 80
?>7.3 数组遍历 for /foreach
使用 for 循环遍历索引数组
php
<?php
$fruits = ["苹果", "香蕉", "橙子", "葡萄"];
$length = count($fruits);
for ($i = 0; $i < $length; $i++) {
echo "$i: $fruits[$i]<br>";
}
?>使用 foreach 循环遍历数组
php
<?php
// 遍历索引数组
$fruits = ["苹果", "香蕉", "橙子", "葡萄"];
foreach ($fruits as $fruit) {
echo "$fruit<br>";
}
// 带索引的遍历
foreach ($fruits as $index => $fruit) {
echo "$index: $fruit<br>";
}
// 遍历关联数组
$person = [
"name" => "张三",
"age" => 25,
"email" => "zhangsan@example.com"
];
foreach ($person as $key => $value) {
echo "$key: $value<br>";
}
// 遍历二维数组
$students = [
["name" => "张三", "age" => 18],
["name" => "李四", "age" => 19],
["name" => "王五", "age" => 20]
];
foreach ($students as $student) {
echo "姓名:{$student['name']},年龄:{$student['age']}<br>";
}
?>7.4 数组常用函数(count、in_array、array_push、sort 等)
数组长度
php
<?php
$fruits = ["苹果", "香蕉", "橙子", "葡萄"];
echo count($fruits); // 输出 4
?>检查元素是否存在
php
<?php
$fruits = ["苹果", "香蕉", "橙子", "葡萄"];
if (in_array("香蕉", $fruits)) {
echo "香蕉在数组中";
} else {
echo "香蕉不在数组中";
}
?>添加元素
php
<?php
$fruits = ["苹果", "香蕉"];
// 在数组末尾添加元素
array_push($fruits, "橙子", "葡萄");
// 或使用简写
$fruits[] = "橙子";
$fruits[] = "葡萄";
// 在数组开头添加元素
array_unshift($fruits, "草莓");
?>删除元素
php
<?php
$fruits = ["苹果", "香蕉", "橙子", "葡萄"];
// 删除数组末尾的元素
array_pop($fruits); // 删除 "葡萄"
// 删除数组开头的元素
array_shift($fruits); // 删除 "苹果"
// 删除指定位置的元素
unset($fruits[1]); // 删除索引为 1 的元素
?>数组排序
php
<?php
// 数字数组排序
$numbers = [3, 1, 4, 1, 5, 9, 2, 6];
sort($numbers); // 升序排序
rsort($numbers); // 降序排序
// 关联数组排序
$person = ["age" => 25, "name" => "张三", "email" => "zhangsan@example.com"];
ksort($person); // 按键名排序
asort($person); // 按值排序
?>数组合并
php
<?php
$array1 = ["苹果", "香蕉"];
$array2 = ["橙子", "葡萄"];
$merged = array_merge($array1, $array2);
// 结果:["苹果", "香蕉", "橙子", "葡萄"]
?>数组分割
php
<?php
$fruits = ["苹果", "香蕉", "橙子", "葡萄", "草莓"];
$chunks = array_chunk($fruits, 2);
// 结果:[["苹果", "香蕉"], ["橙子", "葡萄"], ["草莓"]]
?>7.5 实操:学生列表、商品列表数组处理
创建 arrays-demo.php 文件
php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>数组操作示例</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
.section {
margin: 20px 0;
padding: 15px;
border: 1px solid #ccc;
border-radius: 5px;
}
h2 {
color: #333;
}
table {
border-collapse: collapse;
width: 100%;
margin: 10px 0;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<h1>数组操作示例</h1>
<!-- 学生列表 -->
<div class="section">
<h2>学生列表</h2>
<?php
$students = [
[
"id" => 1,
"name" => "张三",
"age" => 18,
"gender" => "男",
"score" => 90
],
[
"id" => 2,
"name" => "李四",
"age" => 19,
"gender" => "女",
"score" => 85
],
[
"id" => 3,
"name" => "王五",
"age" => 20,
"gender" => "男",
"score" => 95
],
[
"id" => 4,
"name" => "赵六",
"age" => 18,
"gender" => "女",
"score" => 88
]
];
// 显示学生列表
echo '<table>';
echo '<tr><th>ID</th><th>姓名</th><th>年龄</th><th>性别</th><th>分数</th></tr>';
foreach ($students as $student) {
echo '<tr>';
echo '<td>' . $student['id'] . '</td>';
echo '<td>' . $student['name'] . '</td>';
echo '<td>' . $student['age'] . '</td>';
echo '<td>' . $student['gender'] . '</td>';
echo '<td>' . $student['score'] . '</td>';
echo '</tr>';
}
echo '</table>';
// 计算平均分数
$totalScore = 0;
foreach ($students as $student) {
$totalScore += $student['score'];
}
$averageScore = $totalScore / count($students);
echo '<p>平均分数:' . number_format($averageScore, 1) . '</p>';
// 查找最高分学生
$maxScore = 0;
$topStudent = null;
foreach ($students as $student) {
if ($student['score'] > $maxScore) {
$maxScore = $student['score'];
$topStudent = $student;
}
}
echo '<p>最高分学生:' . $topStudent['name'] . ',分数:' . $topStudent['score'] . '</p>';
?>
</div>
<!-- 商品列表 -->
<div class="section">
<h2>商品列表</h2>
<?php
$products = [
[
"id" => 1,
"name" => "iPhone 14",
"price" => 5999,
"stock" => 100
],
[
"id" => 2,
"name" => "MacBook Pro",
"price" => 12999,
"stock" => 50
],
[
"id" => 3,
"name" => "AirPods Pro",
"price" => 1999,
"stock" => 200
],
[
"id" => 4,
"name" => "iPad Air",
"price" => 4799,
"stock" => 80
]
];
// 显示商品列表
echo '<table>';
echo '<tr><th>ID</th><th>商品名称</th><th>价格</th><th>库存</th></tr>';
foreach ($products as $product) {
echo '<tr>';
echo '<td>' . $product['id'] . '</td>';
echo '<td>' . $product['name'] . '</td>';
echo '<td>¥' . $product['price'] . '</td>';
echo '<td>' . $product['stock'] . '</td>';
echo '</tr>';
}
echo '</table>';
// 按价格排序(从高到低)
usort($products, function($a, $b) {
return $b['price'] - $a['price'];
});
echo '<h3>按价格排序(从高到低)</h3>';
echo '<table>';
echo '<tr><th>ID</th><th>商品名称</th><th>价格</th><th>库存</th></tr>';
foreach ($products as $product) {
echo '<tr>';
echo '<td>' . $product['id'] . '</td>';
echo '<td>' . $product['name'] . '</td>';
echo '<td>¥' . $product['price'] . '</td>';
echo '<td>' . $product['stock'] . '</td>';
echo '</tr>';
}
echo '</table>';
// 计算总库存
$totalStock = 0;
foreach ($products as $product) {
$totalStock += $product['stock'];
}
echo '<p>总库存:' . $totalStock . '</p>';
?>
</div>
</body>
</html>访问页面
- 将文件保存到网站根目录
- 打开浏览器,访问
http://localhost/arrays-demo.php - 查看页面效果
小结
通过本章的学习,你掌握了 PHP 数组的基本概念和操作,包括索引数组、关联数组、二维数组和多维数组。你还学习了数组的遍历方法和常用数组函数。数组是 PHP 中最常用的数据结构,它可以存储和管理大量数据,是实现各种功能的基础。在后续的学习中,你将经常使用数组来处理和管理数据。
