Skip to content

php_ref_array

数组(Array)是 PHP 中一种基本的数据结构,允许你在单个变量中存储多个值。PHP 提供了丰富的一系列函数来有效地创建、访问和操作数组。

PHP 支持数字索引数组(默认为从索引 0 开始)和关联数组(使用字符串键)。多维数组(包含其他数组的数组)也得到完全支持。

现代 PHP 版本(自 PHP 5.4 起)倾向于使用短数组语法 [] 而非旧的 array() 构造,以提高可读性:

<?php
// 旧语法
$indexedOld = array(1, 2, 3);
$assocOld = array('a' => 1, 'b' => 2);
// 现代语法 (推荐)
$indexedNew = [1, 2, 3];
$assocNew = ['a' => 1, 'b' => 2];
?>

数组函数内置于 PHP 核心中。使用它们无需安装或特殊配置。

这里列出了一些 PHP 中常用的内置数组函数。如需完整且最新的列表,请始终参考官方 PHP 文档。

函数描述
[] / array()创建一个数组 (在现代 PHP 中使用 [])。
array_change_key_case()将数组中所有键更改为小写或大写。
array_chunk()将一个数组分割成多个较小的数组块。
array_column()返回多维数组中单列的值。
array_combine()通过使用一个数组作为键,另一个数组作为值来创建一个新数组。
array_count_values()统计数组中每个值出现的次数。
array_diff()计算数组的差集 (仅比较值)。
array_diff_assoc()计算带有额外索引检查的数组差集 (比较键和值)。
array_diff_key()使用键进行比较,计算数组的差集。
array_fill()用指定的值填充一个数组。
array_fill_keys()用指定的值填充一个数组,同时指定键。
array_filter()使用回调函数过滤数组的元素。
array_flip()交换数组中所有键与其关联的值。
array_intersect()计算数组的交集 (仅比较值)。
array_intersect_assoc()计算带有额外索引检查的数组交集 (比较键和值)。
array_intersect_key()使用键进行比较,计算数组的交集。
array_is_list()检查数组的键是否是从 0 到 count()-1 的序列 (PHP 8.1+)。用于区分索引数组和关联数组。
array_key_exists() / key_exists()检查指定的键是否存在于数组中。
array_keys()返回数组的所有键或部分键。
array_map()将回调函数应用于给定数组的元素。
array_merge()合并一个或多个数组。注意:后面的关联键会覆盖前面的。数字键会被重新索引。
array_merge_recursive()递归地合并一个或多个数组。
array_multisort()对多个或多维数组进行排序。
array_pad()使用指定值将数组填充到指定长度。
array_pop()将数组最后一个元素弹出 (移除并返回)。
array_product()计算数组中值的乘积。
array_push()将一个或多个元素推入(添加到)数组末尾。
array_rand()从数组中随机取出(一个或多个)键。
array_reduce()使用回调函数迭代地将数组简化为单个值。
array_replace()将传入数组的值替换到第一个数组中。
array_replace_recursive()递归地将传入数组的值替换到第一个数组中。
array_reverse()返回元素顺序反转的数组。
array_search()在数组中搜索给定的值,如果成功则返回第一个对应的键。
array_shift()将数组的第一个元素移出 (移除并返回)。
array_slice()提取数组的一部分切片。
array_splice()移除数组的一部分,并替换为其他内容。
array_sum()计算数组中值的总和。
array_unique()移除数组中的重复值。
array_unshift()将一个或多个元素前置(添加到)数组开头。
array_values()返回数组中的所有值,并对数组重新进行数字索引。
array_walk()将用户提供的函数应用于数组的每个成员。
array_walk_recursive()递归地将用户提供的函数应用于数组的每个成员。
arsort()根据值对关联数组进行降序排序。
asort()根据值对关联数组进行升序排序。
compact()创建一个包含变量及其值的数组。
count() / sizeof()计算数组中的所有元素或对象中的属性。推荐使用 count()。
current()返回数组中的当前元素。
end()将数组的内部指针设置为最后一个元素。
extract()将数组中的变量导入当前符号表。由于可能覆盖现有变量,请谨慎使用。
in_array()检查数组中是否存在指定的值。
key()获取数组中当前元素的键。
krsort()根据键对关联数组进行降序排序。
ksort()根据键对关联数组进行升序排序。
list()将变量赋值,就像它们是一个数组一样。现代 PHP 也支持解构赋值:[$a, $b] = $array;。
natcasesort()使用不区分大小写的“自然顺序”算法对数组进行排序。
natsort()使用“自然顺序”算法对数组进行排序。
next()向前移动数组的内部指针。
prev()向后移动数组的内部指针。
range()创建一个包含指定范围元素的数组。
reset()将数组的内部指针设置为第一个元素。
rsort()对索引数组进行降序排序。
shuffle()打乱(随机化元素顺序)数组。
sort()对索引数组进行升序排序。
uasort()使用用户定义的比较函数根据值对数组进行排序,同时保持键的关联。
uksort()使用用户定义的比较函数根据键对数组进行排序。
usort()使用用户定义的比较函数根据值对数组进行排序。

注意:each() 函数在 PHP 7.2 中被弃用,并在 PHP 8.0 中被移除。请使用 foreach 循环或 current()、key()、next()、prev() 和 reset() 等函数来遍历数组并管理内部指针。

最佳实践:对于遍历数组,foreach 循环通常是最具可读性和推荐的方法:

<?php
$colors = ['red', 'green', 'blue'];
// 遍历值
foreach ($colors as $color) {
echo "Color: $color\n";
}
$capitals = ['USA' => 'Washington D.C.', 'UK' => 'London'];
// 遍历键和值
foreach ($capitals as $country => $city) {
echo "Capital of $country is $city\n";
}
?>

提示:对于非常大的数据集,考虑使用生成器(Generators,即 yield)而非在内存中构建大型数组,以提高性能并减少内存消耗。