array_walk需用引用参数才能修改原数组,支持索引与关联数组遍历,不改变结构且无法中断;与array_map不同,它就地修改而不返回新数组。

array_walk 能遍历数组并修改元素值,但只在传引用时才真正改变原数组 —— 这是初学者最容易踩的坑。
必须用 & 引用参数才能改原数组
array_walk 的回调函数默认接收元素值的副本,直接赋值无效。要修改原数组,回调的第一个参数必须声明为引用:
- ✅ 正确写法:
function ($&$value, $key) { $value = strtoupper($value); } - ❌ 错误写法:
function ($value, $key) { $value = strtoupper($value); }(原数组不变)
支持索引数组和关联数组
回调函数可同时拿到键和值,适用于两类数组:
本组件封装了Angular1.0版本,组件实现了以下功能: 路由,子路由,轮播,cookie读写,加密,表单提交验证,拦截器,白名单,搜索过滤与排序(等级划分), 大小写转换,Map数组循环遍历动态修改后台数据等功能。
- 索引数组:$key 是数字下标(如 0、1、2)
- 关联数组:$key 是字符串键名(如 'name'、'email')
- 示例:对用户数据统一处理邮箱为小写:
array_walk($users, function (&$user) { $user['email'] = strtolower($user['email']); });
不改变数组结构,也不支持中断
array_walk 不会新增、删除或重排元素,也不能像 foreach 那样用 break 中断遍历:
立即学习“PHP免费学习笔记(深入)”;
- 它始终遍历全部元素,返回布尔值表示是否执行成功
- 若需条件跳出,应改用 foreach 或 array_map + 自定义逻辑
- 注意:它不返回新数组,仅就地修改(前提是用了引用)
与 array_map 的关键区别
别混淆二者用途:
- array_walk:就地修改原数组(需引用),不返回新数组,适合“打补丁”式操作
- array_map:返回全新数组,原数组不变,适合函数式转换(如全部转大写、加前缀)
- 如果既要修改又要链式调用,优先选 array_map;如果明确要复用原变量内存,再用 array_walk + 引用










