php数组函数面试重在理解行为差异与边界处理:array_keys/array_values/array_flip处理键值互换与索引重置;array_filter/array_unique/array_diff实现筛选去重与差集;array_merge/array_merge_recursive/array_chunk用于合并拆分;array_map/array_walk/foreach侧重遍历映射,注意是否修改原数组、键名保留及性能差异。

PHP 数组函数是面试高频考点,重点不在死记参数顺序,而在理解函数行为差异、边界场景处理和实际组合应用能力。
数组键值操作类:array_keys / array_values / array_flip
array_keys 返回键名数组,支持可选搜索值和严格比较;常被问“如何获取重复值的全部键名”——需配合 array_filter + array_count_values 实现。
array_values 重置数字索引,但不改变关联键;注意它不会对原数组排序,只是提取值并重编号。
array_flip 键值互换,失败时(如值非标量)会丢弃非法项且不报错;面试常考“翻转后键冲突怎么处理”——后出现的值会覆盖先出现的,这是 PHP 默认行为。
筛选与过滤类:array_filter / array_unique / array_diff
array_filter 默认过滤空值(false、0、""、null、[]),传回调函数可自定义逻辑;注意它保留原始键名,如需重排索引得套一层 array_values。
array_unique 默认松散比较,字符串 "1" 和整数 1 被视为相同;若需严格区分类型,必须传入 SORT_REGULAR 或 SORT_STRING 标志。
array_diff 比较第一个数组与其他数组的值差异,返回仅在第一个中出现的值;键名不参与比较,只按值判断,结果保留原始键名。
合并与拆分类:array_merge / array_merge_recursive / array_chunk
array_merge 合并多个数组,数字键重排,字符串键冲突时后者覆盖前者;若传入非数组参数会警告,建议用 is_array 预检。
array_merge_recursive 遇到相同字符串键时递归合并而非覆盖,适合多维配置合并;但要注意它不会去重,同键的值会被压入新数组而非合并成单一值。
array_chunk 按指定大小切分数组,最后一块可能不足设定长度;第二个参数设为 true 可保留原始键名,否则默认重排为数字索引。
遍历与映射类:array_map / array_walk / foreach 差异
array_map 返回新数组,不修改原数组;支持多数组并行处理,长度以最短数组为准;回调函数接收的是值(可选键),不能直接改原数组元素。
array_walk 直接操作原数组,需用引用(&$value)才能修改值;可传额外参数给回调;键名始终可用,适合需键+值联合处理的场景。
面试常对比 foreach:它是语言结构,性能略优,支持引用赋值(foreach ($arr as &$v)),但无返回值,纯用于遍历。











