跳转到内容

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)

内存结构[编辑 | 编辑源代码]

索引数组在内存中的典型存储方式:

graph LR A[数组变量] --> B[内存地址] B --> C[索引0: 值地址] B --> D[索引1: 值地址] B --> E[...] C --> F["值1"] D --> G["值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)

数学表示: T(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[]
  • 频繁搜索时考虑使用关联数组或专门的数据结构
  • 注意数组函数多数返回新数组而非修改原数组