PHP索引数组
外观
PHP索引数组[编辑 | 编辑源代码]
索引数组是PHP中最基础的数组类型之一,使用数字键(从0开始)存储和访问元素。本条目将详细介绍其特性、操作方法和实际应用场景。
基本概念[编辑 | 编辑源代码]
索引数组(Indexed Array)有以下核心特征:
- 键名为连续整数,默认从0开始自动分配
- 元素按插入顺序存储
- 可通过方括号
[]
或array()
构造器创建
创建方式[编辑 | 编辑源代码]
// 方式1:短数组语法(PHP 5.4+)
$colors = ['red', 'green', 'blue'];
// 方式2:array()构造器
$fruits = array('apple', 'banana', 'orange');
// 方式3:动态赋值
$languages[0] = 'PHP';
$languages[1] = 'JavaScript';
基本操作[编辑 | 编辑源代码]
访问元素[编辑 | 编辑源代码]
使用数字索引访问特定位置元素:
echo $colors[0]; // 输出:red
echo $fruits[2]; // 输出:orange
遍历数组[编辑 | 编辑源代码]
常用遍历方法对比:
方法 | 示例 | 适用场景 |
---|---|---|
for循环 | for($i=0; $i<count($array); $i++)
|
需要索引号时 |
foreach | foreach($array as $value)
|
仅需元素值时 |
foreach+键 | foreach($array as $index=>$value)
|
需要索引和值 |
修改数组[编辑 | 编辑源代码]
// 修改元素
$colors[1] = 'yellow';
// 添加元素(自动使用下一个整数键)
$colors[] = 'black'; // 等同于 $colors[3] = 'black'
常用函数[编辑 | 编辑源代码]
PHP提供丰富的数组处理函数:
函数 | 描述 | 示例 |
---|---|---|
count() |
获取元素数量 | count($colors)
|
array_push() |
末尾添加元素 | array_push($colors, 'white')
|
array_pop() |
移除末尾元素 | array_pop($colors)
|
array_merge() |
合并数组 | array_merge($arr1, $arr2)
|
array_slice() |
截取子数组 | array_slice($arr, 1, 2)
|
内存结构[编辑 | 编辑源代码]
索引数组在内存中的典型存储方式:
实际应用案例[编辑 | 编辑源代码]
案例1:考试成绩处理[编辑 | 编辑源代码]
$scores = [85, 92, 78, 95];
$total = array_sum($scores);
$average = $total / count($scores);
echo "平均分:".$average; // 输出:平均分:87.5
案例2:分页数据[编辑 | 编辑源代码]
$itemsPerPage = 5;
$currentPage = 2;
$allItems = range(1, 100); // 生成1-100的数组
$pageItems = array_slice(
$allItems,
($currentPage - 1) * $itemsPerPage,
$itemsPerPage
);
print_r($pageItems); // 输出6-10的内容
性能考虑[编辑 | 编辑源代码]
索引数组操作的时间复杂度:
- 访问:O(1)
- 搜索:O(n)
- 插入/删除末尾:O(1)
- 插入/删除中间:O(n)
数学表示:
进阶技巧[编辑 | 编辑源代码]
多维索引数组[编辑 | 编辑源代码]
$matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
echo $matrix[1][2]; // 输出:6
类型混合[编辑 | 编辑源代码]
PHP允许不同数据类型的元素共存:
$mixed = [1, "text", 3.14, true];
常见问题[编辑 | 编辑源代码]
Q:索引不从0开始会怎样?
A:PHP会自动将最小索引视为0,其他索引按相对位置计算。例如$arr[5]=a; $arr[]=b
会导致b
的索引为6。
Q:如何重置索引?
A:使用array_values()
函数:
$reindexed = array_values($array);
最佳实践[编辑 | 编辑源代码]
- 优先使用短数组语法
[]
- 大量插入操作考虑使用
array_push()
而非$array[]
- 频繁搜索时考虑使用关联数组或专门的数据结构
- 注意数组函数多数返回新数组而非修改原数组