PHP 数组操作技巧
PHP 数组操作技巧
数组是 PHP 最常用的数据结构,掌握这些技巧,写代码效率翻倍。
1. 数组合并
// 索引数组合并
$arr1 = [1, 2];
$arr2 = [3, 4];
$result = array_merge($arr1, $arr2); // [1,2,3,4]
// 关联数组合并,后面覆盖前面
$arr1 = ['a' => 1, 'b' => 2];
$arr2 = ['b' => 3, 'c' => 4];
$result = array_merge($arr1, $arr2); // ['a'=>1, 'b'=>3, 'c'=>4]
2. 数组去重
// 一维数组去重
$arr = [1, 2, 2, 3, 3, 3];
$result = array_unique($arr); // [1,2,3]
// 二维数组按字段去重
$users = [
['id' => 1, 'name' => '张三'],
['id' => 2, 'name' => '李四'],
['id' => 1, 'name' => '张三'],
];
$ids = array_column($users, 'id');
$unique = array_unique($ids);
3. 数组排序
// 升序
sort($arr);
// 降序
rsort($arr);
// 按键排序
ksort($arr);
// 按值排序,保留键
asort($arr);
4. 数组过滤
// 过滤空值
$arr = [1, 0, '', null, 'a'];
$result = array_filter($arr); // [1, 'a']
// 自定义过滤
$result = array_filter($arr, function($value) {
return $value > 2;
});
5. 数组取值
// 取某一列
$names = array_column($users, 'name');
// 取交集
$arr1 = [1, 2, 3];
$arr2 = [2, 3, 4];
$result = array_intersect($arr1, $arr2); // [2,3]
// 取差集
$result = array_diff($arr1, $arr2); // [1]
6. 常用技巧
// 判断键是否存在
isset($arr['key']);
array_key_exists('key', $arr);
// 随机取一个
$value = array_rand($arr);
// 打乱数组
shuffle($arr);
// 数组合并成字符串
$str = implode(',', $arr);
// 字符串转数组
$arr = explode(',', $str);
总结
PHP 数组函数非常丰富,常用的就这些:合并、去重、排序、过滤、取值。把这些记熟,日常开发基本够用了。
PHP 数组常用操作:从排序到过滤的完整指南
前言
数组是 PHP 里最常用的数据结构,没有之一。PHP 提供了 100 多个数组函数,很多人只知道其中几个。本文整理最常用的数组操作。
一、创建数组
<?php
// 索引数组
$arr1 = [1, 2, 3, 4, 5];
// 关联数组
$arr2 = ['name' => '张三', 'age' => 18];
// 空数组
$arr3 = [];
二、添加元素
<?php
$arr = [1, 2, 3];
// 末尾添加
$arr[] = 4; // [1, 2, 3, 4]
array_push($arr, 5); // [1, 2, 3, 4, 5]
// 开头添加
array_unshift($arr, 0); // [0, 1, 2, 3, 4, 5]
// 关联数组添加
$user = ['name' => '张三'];
$user['age'] = 18; // ['name' => '张三', 'age' => 18]
三、删除元素
<?php
$arr = [1, 2, 3, 4, 5];
// 删除末尾元素
array_pop($arr); // [1, 2, 3, 4]
// 删除开头元素
array_shift($arr); // [2, 3, 4]
// 删除指定元素
unset($arr[1]); // [0 => 2, 2 => 4],注意索引不连续
四、查找元素
<?php
$arr = ['a', 'b', 'c'];
// 值是否存在
in_array('b', $arr); // true
// 键是否存在
$user = ['name' => '张三', 'age' => 18];
array_key_exists('name', $user); // true
// 查找值的键
array_search('b', $arr); // 1
五、数组长度
<?php
$arr = [1, 2, 3];
count($arr); // 3
sizeof($arr); // 3(count 的别名)
六、排序
索引数组排序
<?php
$arr = [3, 1, 2, 5, 4];
sort($arr); // [1, 2, 3, 4, 5] 升序
rsort($arr); // [5, 4, 3, 2, 1] 降序
关联数组排序
<?php
$age = ['张三' => 20, '李四' => 18, '王五' => 25];
asort($age); // 按值升序,保持键名
ksort($age); // 按键升序
arsort($age); // 按值降序
krsort($age); // 按键降序
自定义排序
<?php
$users = [
['name' => '张三', 'age' => 20],
['name' => '李四', 'age' => 18],
['name' => '王五', 'age' => 25],
];
// 按 age 升序
usort($users, function ($a, $b) {
return $a['age'] <=> $b['age'];
});
七、数组过滤
array_filter()
<?php
$arr = [1, 2, 3, 4, 5, 6];
// 过滤出偶数
$even = array_filter($arr, function ($n) {
return $n % 2 == 0;
});
// [2, 4, 6]
array_map()
<?php
$arr = [1, 2, 3, 4, 5];
// 每个元素乘以 2
$doubled = array_map(function ($n) {
return $n * 2;
}, $arr);
// [2, 4, 6, 8, 10]
array_walk()
<?php
$arr = ['a' => 1, 'b' => 2];
array_walk($arr, function (&$value, $key) {
$value = $value * 10;
});
// ['a' => 10, 'b' => 20]
八、数组合并
<?php
$arr1 = [1, 2];
$arr2 = [3, 4];
// 数组合并
$merged = array_merge($arr1, $arr2); // [1, 2, 3, 4]
// + 运算符(保留第一个数组的键)
$result = $arr1 + $arr2;
九、数组切片
<?php
$arr = [1, 2, 3, 4, 5];
// 从第 2 个开始取 3 个
$slice = array_slice($arr, 1, 3); // [2, 3, 4]
// 从末尾取
$last = array_slice($arr, -2); // [4, 5]
十、键值操作
<?php
$user = ['name' => '张三', 'age' => 18];
// 所有键
array_keys($user); // ['name', 'age']
// 所有值
array_values($user); // ['张三', 18]
// 翻转键值
array_flip($user); // ['张三' => 'name', 18 => 'age']
十一、常用操作速查表
| 操作 | 函数 |
|---|---|
| 数组长度 | count() |
| 查找值 | in_array() |
| 查找键 | array_key_exists() |
| 排序 | sort() / asort() / ksort() |
| 过滤 | array_filter() |
| 映射 | array_map() |
| 合并 | array_merge() |
| 切片 | array_slice() |
十二、常见坑
- unset 后索引不连续:用 array_values() 重新索引
- array_merge 和 + 的区别:数字键 array_merge 会重新索引,+ 不会
- in_array 严格模式:加第三个参数 true 防止类型转换
- sort 会改变原数组:不是返回新数组
总结
PHP 数组操作的核心要点:
- 增删改查:array_push/pop/unshift/shift/unset
- 查找判断:in_array/array_key_exists/array_search
- 排序:sort/asort/ksort/usort
- 处理:array_filter/array_map/array_walk
- 合并切片:array_merge/array_slice
数组用好了,PHP 开发效率能提升一倍。