做网站开发这些年,处理数据最频繁的操作就是和数组打交道。尤其是PHP里的数组索引,看似简单,但用好了能省不少事。
什么是数组索引
在PHP中,数组分两种:一种是索引数组,另一种是关联数组。索引数组的键是数字,从0开始自动分配。比如你从数据库查出一组用户信息,没特别指定键名时,默认就是索引数组。
$users = array('张三', '李四', '王五');
echo $users[0]; // 输出:张三
这里的 $users[0] 就是通过索引访问第一个元素。这种结构适合顺序存储、批量处理,像循环输出列表就很方便。
手动指定数字索引也是可以的
有时候为了对齐逻辑,我会手动设置数字键,虽然不常见,但在某些场景下挺有用。
$scores = array();
$scores[1] = 85;
$scores[2] = 92;
$scores[4] = 78;
foreach ($scores as $index => $score) {
echo "第{$index}名得分:{$score}\n";
}
注意这里跳过了3,PHP不会报错,只是中间留空。遍历时只会输出存在的索引,这点要心里有数。
删除元素后索引不会自动重排
有个坑不少人踩过:用 unset() 删掉某个元素后,后面的索引不会往前补。
unset($users[1]); // 删除李四
print_r(array_values($users)); // 想要连续索引?得手动调用 array_values()
如果之后要做 for 循环按数字索引取值,漏了这步就会出问题。所以删完记得用 array_values() 重建索引。
for循环遍历只适合纯索引数组
当你确定数组是连续数字索引时,用 for 比 foreach 稍微快一点,特别是数据量大时。
$count = count($users);
for ($i = 0; $i < $count; $i++) {
echo "用户:" . $users[$i] . "\n";
}
但如果数组中间有断层,或者你不确定是否连续,还是老实用 foreach 更安全。
混合索引和关联的情况也常见
实际项目里,数组经常既是数字键又是字符串键混着来。比如接口返回的数据结构:
$data = array(
0 => '状态正常',
'msg' => '操作成功',
1 => '附加信息'
);
这时候遍历推荐用 foreach,既能处理数字索引又能处理字符串键,省心。
平时写代码别太依赖索引的连续性,多考虑数据变化后的兼容性,少些 bug,上线也安心些。