Skip to content

第 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>

访问页面

  1. 将文件保存到网站根目录
  2. 打开浏览器,访问 http://localhost/arrays-demo.php
  3. 查看页面效果

小结

通过本章的学习,你掌握了 PHP 数组的基本概念和操作,包括索引数组、关联数组、二维数组和多维数组。你还学习了数组的遍历方法和常用数组函数。数组是 PHP 中最常用的数据结构,它可以存储和管理大量数据,是实现各种功能的基础。在后续的学习中,你将经常使用数组来处理和管理数据。

© 2026 编程马·菜鸟教程 版权所有