PHP8 数组相关函数:全面解析与实战应用
数组是 PHP 中最常用的数据结构之一,用于存储和处理多个值。PHP8 提供了丰富的数组函数,涵盖数组的创建、修改、查询、排序等操作。本文将详细介绍常用的数组函数及其在实际开发中的应用。
数组创建与初始化函数
1. array() 与短数组语法 []
最基础的数组创建方式,[] 是 PHP5.4+ 引入的短语法,推荐使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
$fruits = array("apple", "banana", "cherry"); $vegetables = ["carrot", "potato", "cabbage"];
$user = array( "name" => "John", "age" => 30, "email" => "john@example.com" ); $product = [ "id" => 101, "name" => "Laptop", "price" => 999.99 ]; ?>
|
2. range():创建范围内的数组
快速创建包含指定范围元素的数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
$numbers = range(1, 10); print_r($numbers);
$evenNumbers = range(2, 20, 2); print_r($evenNumbers);
$letters = range('a', 'e'); print_r($letters);
?>
|
3. array_fill():填充数组
用指定值填充数组,创建具有指定长度的数组。
1 2 3 4 5 6 7 8 9 10 11
| <?php
$fruits = array_fill(0, 5, "apple"); print_r($fruits);
$scores = array_fill(10, 3, 0); print_r($scores);
?>
|
数组信息获取函数
1. count() 与 sizeof():计算数组长度
获取数组中元素的数量,sizeof() 是 count() 的别名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php $colors = ["red", "green", "blue"]; echo count($colors);
$users = [ ["name" => "John"], ["name" => "Jane"] ];
echo count($users);
echo count($users, COUNT_RECURSIVE); ?>
|
2. isset() 与 empty():检查数组元素
isset():检查数组元素是否存在且不为 null
empty():检查数组元素是否为空(0、””、null、空数组等都视为空)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php $user = [ "name" => "John", "age" => 0, "email" => null ];
var_dump(isset($user["name"])); var_dump(isset($user["email"])); var_dump(isset($user["phone"]));
var_dump(empty($user["age"])); var_dump(empty($user["name"])); ?>
|
3. array_key_exists():检查键是否存在
专门用于检查数组中是否存在指定的键名。
1 2 3 4 5 6 7 8 9 10 11
| <?php $product = ["id" => 101, "name" => "Laptop"];
var_dump(array_key_exists("id", $product)); var_dump(array_key_exists("price", $product));
$test = ["key" => null]; var_dump(array_key_exists("key", $test)); var_dump(isset($test["key"])); ?>
|
数组元素操作函数
1. array_push() 与 array_pop():数组尾部操作
array_push():向数组尾部添加一个或多个元素
array_pop():删除并返回数组的最后一个元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php $fruits = ["apple", "banana"];
array_push($fruits, "cherry", "date"); print_r($fruits);
$fruits[] = "elderberry"; print_r($fruits);
$last = array_pop($fruits); echo "删除的元素:{$last}<br>"; print_r($fruits);
?>
|
2. array_unshift() 与 array_shift():数组头部操作
array_unshift():向数组头部添加一个或多个元素
array_shift():删除并返回数组的第一个元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php $numbers = [3, 4, 5];
array_unshift($numbers, 1, 2); print_r($numbers);
$first = array_shift($numbers); echo "删除的元素:{$first}<br>"; print_r($numbers);
?>
|
3. array_splice():数组片段操作
删除数组的一部分元素,并可以在删除的位置插入新元素。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php $colors = ["red", "green", "blue", "yellow"];
array_splice($colors, 1, 2); print_r($colors);
$numbers = [1, 2, 3, 4, 5];
array_splice($numbers, 2, 1, ["a", "b"]); print_r($numbers); ?>
|
数组过滤与查找函数
1. array_filter():过滤数组元素
使用回调函数过滤数组中的元素,保留返回 true 的元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php $numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$evenNumbers = array_filter($numbers, function($n) { return $n % 2 == 0; }); print_r($evenNumbers);
$users = [ ["name" => "John", "age" => 25], ["name" => "Jane", "age" => 17], ["name" => "Bob", "age" => 30] ]; $adults = array_filter($users, function($user) { return $user["age"] >= 18; }); print_r($adults); ?>
|
2. array_search() 与 in_array():查找元素
in_array($value, $array):检查数组中是否存在指定值
array_search($value, $array):查找值并返回其键名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php $fruits = ["apple", "banana", "cherry"];
var_dump(in_array("banana", $fruits)); var_dump(in_array("date", $fruits));
$key = array_search("cherry", $fruits); echo "键名:{$key}";
$numbers = [1, 2, 3, "4"]; var_dump(in_array(4, $numbers)); var_dump(in_array(4, $numbers, true)); ?>
|
3. array_keys() 与 array_values():获取键与值
array_keys():返回数组中所有的键名
array_values():返回数组中所有的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?php $user = [ "id" => 101, "name" => "John", "age" => 30 ];
$keys = array_keys($user); print_r($keys);
$values = array_values($user); print_r($values);
$products = [ "apple" => "fruit", "carrot" => "vegetable", "banana" => "fruit" ]; $fruitKeys = array_keys($products, "fruit"); print_r($fruitKeys); ?>
|
数组排序函数
PHP 提供了多种排序函数,适用于不同的排序需求:
| 函数 |
说明 |
保持键值关联 |
sort() |
按值升序排序 |
否(重置索引) |
rsort() |
按值降序排序 |
否 |
asort() |
按值升序排序 |
是 |
arsort() |
按值降序排序 |
是 |
ksort() |
按键名升序排序 |
是 |
krsort() |
按键名降序排序 |
是 |
usort() |
使用自定义函数排序 |
否 |
uasort() |
使用自定义函数排序 |
是 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?php
$numbers = [3, 1, 4, 1, 5, 9]; sort($numbers); print_r($numbers);
$scores = [ "John" => 85, "Jane" => 92, "Bob" => 78 ]; asort($scores); print_r($scores);
ksort($scores); print_r($scores);
$people = [ ["name" => "John", "age" => 30], ["name" => "Jane", "age" => 25], ["name" => "Bob", "age" => 35] ]; usort($people, function($a, $b) { return $a["age"] - $b["age"]; }); print_r($people);
?>
|
数组合并与拆分函数
1. array_merge():合并数组
将一个或多个数组合并为一个数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php $array1 = ["a", "b", "c"]; $array2 = ["d", "e", "f"]; $merged = array_merge($array1, $array2); print_r($merged);
$user1 = ["name" => "John", "age" => 30]; $user2 = ["age" => 31, "email" => "john@example.com"]; $user = array_merge($user1, $user2); print_r($user);
?>
|
2. array_chunk():拆分数组
将一个数组拆分为多个指定长度的子数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <?php $numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$chunks = array_chunk($numbers, 3); print_r($chunks);
$user = [ "name" => "John", "age" => 30, "email" => "john@example.com", "city" => "New York" ]; $userChunks = array_chunk($user, 2, true); print_r($userChunks);
?>
|
PHP8 数组相关新特性
1. 数组解包增强
PHP8 允许在数组表达式中使用 ... 解包多个数组。
1 2 3 4 5 6 7 8 9 10 11 12
| <?php $array1 = [1, 2, 3]; $array2 = [4, 5, 6];
$combined = [...$array1, ...$array2]; print_r($combined);
$newArray = [0, ...$array1, 7, 8]; print_r($newArray); ?>
|
2. array_is_list()(PHP8.1+)
判断一个数组是否为 “列表”(索引从 0 开始的连续整数)。
1 2 3 4 5
| <?php var_dump(array_is_list(["a", "b", "c"])); var_dump(array_is_list(["a", 1 => "b", "c"])); var_dump(array_is_list(["name" => "John", "age" => 30])); ?>
|
3. array_key_first() 与 array_key_last()(PHP7.3+)
获取数组的第一个和最后一个键名,比传统方法更高效。
1 2 3 4 5 6 7 8 9
| <?php $fruits = ["apple", "banana", "cherry"]; echo array_key_first($fruits); echo array_key_last($fruits);
$user = ["name" => "John", "age" => 30, "email" => "john@example.com"]; echo array_key_first($user); echo array_key_last($user); ?>
|
数组函数最佳实践
- 优先使用短数组语法:
[] 比 array() 更简洁易读
- 注意数组类型:区分索引数组和关联数组,选择合适的函数
- 处理大型数组时注意性能:某些函数(如
array_merge())会创建新数组,大型数组可能消耗较多内存
- 使用严格比较:在
in_array() 和 array_search() 中使用第三个参数 true 进行严格类型检查
- 多维数组处理:复杂的多维数组操作可考虑使用递归或专门的数组迭代器
- 空数组判断:使用
empty() 或 count($array) === 0 判断数组是否为空
- 避免修改正在迭代的数组:在
foreach 循环中修改数组可能导致意外结果