PHP数组函数
PHP7+/PHP8,分为检测、增删、截取、键值、合并拆分、交集差集、排序、回调、转换、其他;
⚠️带&参数代表会修改原数组
1. 数组检测判断
- • is_array($var):是否为数组 bool
- • in_array(arr,$strict=false):值是否存在,strict严格匹配 bool
- • array_key_exists(arr):键是否存在,null值也返回true bool
- • isset(key]):键存在且值不为null bool
- • count(mode):统计元素;COUNT_RECURSIVE递归 int
- • empty($arr):判断是否空数组 bool
2. 增删元素(栈队列,改原数组)
- • array_push(&v1,arr[]=$val
- • array_pop(&$arr):弹出末尾元素,返回弹出值
- • array_unshift(&v1):头部插入,返回新长度(大数据性能差)
- • array_shift(&$arr):删除头部元素,返回被删值
3. 截取&替换
array_splice(&offset,replace)
修改原数组,可删除/插入/替换;返回被删除元素数组
array_slice(offset,preserve_keys=false)
只读截取,不修改原数组;preserve_keys=true保留原键
splice:改原数组;slice:只读
4. 键值操作
- • array_keys(search=null,$strict):获取全部键
- • array_values($arr):获取全部值,重置数字下标
- • array_flip($arr):键值互换,重复值后面覆盖前面
5. 合并|拆分
- • array_merge(...$arrays):合并数组;字符串键后面覆盖前面,数字键重新索引
- • array_chunk(size,$preserve_keys):数组分块,二维数组分页
- • array_combine(values):键数组+值数组合成新数组,两个数组长度必须一致
6. 交集差集
- • array_intersect(b):按【值】求交集,保留a的键
- • array_intersect_assoc(b):【键+值】同时比较求交集
- • array_intersect_key(b):只按【键】求交集
- • array_diff(b):按【值】求差集(a有b没有)
- • array_diff_assoc(b):【键+值】求差集
- • array_diff_key(b):只按【键】求差集
7. 排序函数(大多修改原数组,返回bool)
- • asort(&$arr) 值升序,保留键(关联数组)
- • shuffle(&$arr) 随机打乱,重置索引
- • array_multisort():多维/多字段排序,常配合array_column
回调:fn(b)=>b 升序;a 降序
8. 回调处理
array_map(arr,...)
每个元素执行回调,返回新数组,不修改原数组,支持多数组
array_filter(cb,$mode)
过滤数组,回调true保留元素;不传回调过滤0 '' null false []
- • ARRAY_FILTER_USE_KEY:回调接收键
- • ARRAY_FILTER_USE_BOTH:回调接收键+值
array_reduce(cb,$init)
归约折叠数组为单个值;cb(item),carry累计值
array_walk(&cb)
遍历原数组,可以修改原数组元素;cb(key),无返回新数组
array_walk_recursive(cb)
递归多维数组,只遍历叶子元素
map:生成新数组;walk:原地遍历修改
9. 数组与变量字符串转换
- • compact('k1','k2'):变量组装成关联数组
- • extract($arr):数组键导出为变量,⚠️安全风险,禁止处理外部数据
- • implode(arr) / join():数组转字符串
10. 其他高频
- • array_column(col,$index_key):二维数组提取列;index_key指定新数组键
- • array_unique($arr):数组去重,保留原有键
- • range(end,$step):生成连续数组
高频易错对比
- 1. array_merge VS +
merge:字符串键覆盖,数字键重排; +:冲突保留前面,不重排下标 - 2. isset(key]) VS array_key_exists
isset:键存在且值不为null;array_key_exists:只看键是否存在,不管值 - 3. asort/sort
asort:保留键;sort:丢弃原有键,重置数字索引 - 4. array_splice VS array_slice
splice修改原数组;slice只读截取
开发小提示
- 1. 尾部追加优先 val,性能优于array_push
- 2. array_unshift/array_shift大数据性能差,尽量避免
- 3. 优先array_column代替手写循环提取二维字段
- 4. extract禁止接收外部输入数据,防止变量覆盖漏洞