CakePHP 4.2中如何给Collection::map的$callback回调传递变量?
问题原因
这个报错是PHP匿名函数的默认作用域规则导致的:匿名函数默认无法直接访问父作用域定义的变量,和CakePHP的Collection组件无关。
解决方法
在匿名函数声明后通过use关键字手动导入需要使用的外部变量即可,修正后的代码如下:
$item = [ 'attributes' => [ 'class' => 'mon-li-{{id}}', 'data-truc' => 'li-{{id}}' ], 'linkAttrs' => ['class' => 'mon-lien', 'style' => 'text-transform: uppercase'] ]; $id = 5; $item = collection($item) ->map(function ($value, $key) use ($id) { // 这里通过use导入$id变量 return preg_replace('/{{id}}/', $id, $value); }) ->toArray();
补充说明
- 如果你需要处理更深层级的多维数组替换,可以将
map方法替换为CakePHP Collection提供的mapRecursive方法,它会自动递归遍历所有子元素执行回调逻辑 - 如果你需要在匿名函数内修改外部变量的原值,需要给
use导入的变量加上引用符号&,写法为use (&$id),你当前的场景仅需读取变量值,不需要加引用
内容的提问来源于stack exchange,提问作者Oliv
相关产品推荐
相关产品推荐

