PHP Array
Array function reference: mutation, search, transform, aggregate, sort.
Key PointsPHP ships 80+ array functions; fewer than 30 see daily use.
Add and remove
| Function | Effect | Returns |
|---|---|---|
| array_push | 尾部追加一个或多个 | 新长度 |
| array_pop | 弹出尾部 | 被弹出的值 |
| array_unshift | 头部插入 | 新长度 |
| array_shift | 弹出头部 | 被弹出的值 |
| array_splice | 删除并替换一段 | 被删除的部分 |
| array_slice | 截取一段(不改原数组) | 新数组 |
| unset | 删除指定键(不重排) | 无 |
PHP
<?php
$arr = [3 => "c", 1 => "a", 2 => "b"];
echo count($arr), "\n";
echo array_sum([1, 2, 3]), "\n";
print_r(array_flip(["a", "b"]));
print_r(array_slice($arr, 1, 2, true));
print_r(array_diff([1, 2, 3], [2]));
print_r(array_intersect([1, 2, 3], [2, 3, 4]));
print_r(array_combine(["a", "b"], [1, 2]));
echo implode(",", array_keys($arr)), "\n";Output
3
6
Array
(
[a] => 0
[b] => 1
)
Array
(
[1] => a
[2] => b
)
Array
(
[0] => 1
[2] => 3
)
Array
(
[1] => 2
[2] => 3
)
Array
(
[a] => 1
[b] => 2
)
3,1,2Search and test
| Function | Purpose | Note |
|---|---|---|
| in_array | 值是否存在 | 第三个参数 true 才严格 |
| array_search | 查值返回键 | 找不到返回 false,键可能是 0 |
| array_key_exists | 键是否存在 | 值为 null 也算存在 |
| isset | 键存在且不为 null | 更快 |
| array_keys | 所有键 | 可带筛选值 |
| array_values | 所有值并重排键 | 修 unset 留下的空洞 |
PHP
<?php
$arr = ["a" => 1, "b" => null, "c" => 0];
var_dump(in_array("1", [1, 2], true));
var_dump(in_array("1", [1, 2]));
var_dump(array_search(2, [1, 2, 3]));
var_dump(array_search("x", [1, 2, 3]));
var_dump(array_key_exists("b", $arr));
var_dump(isset($arr["b"]));Output
bool(false)
bool(true)
int(1)
bool(false)
bool(true)
bool(false)in_array compares loosely by default. **Always pass true for permission and allowlist checks** or 0, "0" and false collapse into each other.Transform and aggregate
PHP
<?php
$nums = [1, 2, 3, 4, 5];
print_r(array_map(fn($n) => $n * 2, $nums));
print_r(array_filter($nums, fn($n) => $n % 2 === 1));
print_r(array_values(array_filter($nums, fn($n) => $n % 2 === 1)));
echo array_reduce($nums, fn($c, $n) => $c + $n, 0), "\n";
echo array_sum($nums), "\n";
echo array_product([2, 3, 4]), "\n";
print_r(array_unique([1, 2, 2, 3, 3, 3]));
print_r(array_chunk($nums, 2));Output
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
Array
(
[0] => 1
[2] => 3
[4] => 5
)
Array
(
[0] => 1
[1] => 3
[2] => 5
)
15
15
24
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 3
[1] => 4
)
[2] => Array
(
[0] => 5
)
)array_filter and single-array array_map preserve keys. Only array_values reindexes — so wrap filter results before sending to a client.
Multidimensional helpers
PHP
<?php
$rows = [
["id" => 2, "name" => "Amy"],
["id" => 1, "name" => "Tom"],
];
print_r(array_column($rows, "name"));
print_r(array_column($rows, null, "id"));
$merged = array_merge_recursive(["a" => [1]], ["a" => [2]]);
print_r($merged);
usort($rows, fn($a, $b) => $a["id"] <=> $b["id"]);
print_r(array_column($rows, "name"));Output
Array
(
[0] => Amy
[1] => Tom
)
Array
(
[2] => Array
(
[id] => 2
[name] => Amy
)
[1] => Array
(
[id] => 1
[name] => Tom
)
)
Array
(
[a] => Array
(
[0] => 1
[1] => 2
)
)
Array
(
[0] => Tom
[1] => Amy
)array_merge overwrites string keys; array_merge_recursive collects them into arrays. Use the former for config, the latter for gathering.增删
| 函数 | 作用 | 返回 |
|---|---|---|
| array_push | 尾部追加一个或多个 | 新长度 |
| array_pop | 弹出尾部 | 被弹出的值 |
| array_unshift | 头部插入 | 新长度 |
| array_shift | 弹出头部 | 被弹出的值 |
| array_splice | 删除并替换一段 | 被删除的部分 |
| array_slice | 截取一段(不改原数组) | 新数组 |
| unset | 删除指定键(不重排) | 无 |
PHP
<?php
$arr = [3 => "c", 1 => "a", 2 => "b"];
echo count($arr), "\n";
echo array_sum([1, 2, 3]), "\n";
print_r(array_flip(["a", "b"]));
print_r(array_slice($arr, 1, 2, true));
print_r(array_diff([1, 2, 3], [2]));
print_r(array_intersect([1, 2, 3], [2, 3, 4]));
print_r(array_combine(["a", "b"], [1, 2]));
echo implode(",", array_keys($arr)), "\n";Output
3
6
Array
(
[a] => 0
[b] => 1
)
Array
(
[1] => a
[2] => b
)
Array
(
[0] => 1
[2] => 3
)
Array
(
[1] => 2
[2] => 3
)
Array
(
[a] => 1
[b] => 2
)
3,1,2查找与判断
| 函数 | 用途 | 注意 |
|---|---|---|
| in_array | 值是否存在 | 第三个参数 true 才严格 |
| array_search | 查值返回键 | 找不到返回 false,键可能是 0 |
| array_key_exists | 键是否存在 | 值为 null 也算存在 |
| isset | 键存在且不为 null | 更快 |
| array_keys | 所有键 | 可带筛选值 |
| array_values | 所有值并重排键 | 修 unset 留下的空洞 |
PHP
<?php
$arr = ["a" => 1, "b" => null, "c" => 0];
var_dump(in_array("1", [1, 2], true));
var_dump(in_array("1", [1, 2]));
var_dump(array_search(2, [1, 2, 3]));
var_dump(array_search("x", [1, 2, 3]));
var_dump(array_key_exists("b", $arr));
var_dump(isset($arr["b"]));Output
bool(false)
bool(true)
int(1)
bool(false)
bool(true)
bool(false)in_array 默认松散比较,in_array("1", [1, 2]) 返回 true。**权限、白名单判断必须传第三个参数 true**,否则 0、"0"、false 之间会互相「相等」。变换与聚合
PHP
<?php
$nums = [1, 2, 3, 4, 5];
print_r(array_map(fn($n) => $n * 2, $nums));
print_r(array_filter($nums, fn($n) => $n % 2 === 1));
print_r(array_values(array_filter($nums, fn($n) => $n % 2 === 1)));
echo array_reduce($nums, fn($c, $n) => $c + $n, 0), "\n";
echo array_sum($nums), "\n";
echo array_product([2, 3, 4]), "\n";
print_r(array_unique([1, 2, 2, 3, 3, 3]));
print_r(array_chunk($nums, 2));Output
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
Array
(
[0] => 1
[2] => 3
[4] => 5
)
Array
(
[0] => 1
[1] => 3
[2] => 5
)
15
15
24
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 3
[1] => 4
)
[2] => Array
(
[0] => 5
)
)array_filter 保留原键,array_map 保留原键(单数组时),只有 array_values 才重排。所以过滤后要输出给前端时,通常得套一层 array_values。
多维数组
PHP
<?php
$rows = [
["id" => 2, "name" => "Amy"],
["id" => 1, "name" => "Tom"],
];
print_r(array_column($rows, "name"));
print_r(array_column($rows, null, "id"));
$merged = array_merge_recursive(["a" => [1]], ["a" => [2]]);
print_r($merged);
usort($rows, fn($a, $b) => $a["id"] <=> $b["id"]);
print_r(array_column($rows, "name"));Output
Array
(
[0] => Amy
[1] => Tom
)
Array
(
[2] => Array
(
[id] => 2
[name] => Amy
)
[1] => Array
(
[id] => 1
[name] => Tom
)
)
Array
(
[a] => Array
(
[0] => 1
[1] => 2
)
)
Array
(
[0] => Tom
[1] => Amy
)array_merge 对字符串键是「后者覆盖」,array_merge_recursive 是「合并成数组」。配置合并用前者,收集同名项用后者——搞混会得到意料之外的结构。