,简单来说我推断出array_reduce将数组作为第一个参数,根据第二个参数中定义的函数进行处理,并迭代结果,直到第一个参数数组的所有值筋疲力尽
但特别是在这个例子中,它采用从getActiveWidgets()
返回的数组。直到这里好,什么是使用声明?
$widgets = array_reduce(
ThemeActiveWidgets::getActiveWidgets(),
function ($carry, $item) use($model) {
if ($item['part_id'] === $model['id']) {
$carry[]=$item;
}
return $carry;
},
[]
);
答案 0 :(得分:1)
我会为你分解一下。
函数array_reduce()
接受两个参数,第一个是数组,第二个是函数,在本例中是闭包或anonymous函数。
在您的代码中,您通过调用ThemeActiveWidgets::getActiveWidgets()
并将其作为第一个参数传递给array_reduce()
来获取数组。作为第二个参数,您传递一个函数,如下所示:
function ($carry, $item) use($model) { ... }
由于这是一个匿名函数,变量$model
(无论你在哪里定义)都超出了这个匿名函数的范围,简单来说这意味着你无法访问$model
变量在匿名函数内。但是,如果你通过它,你就可以访问它"通过在函数声明中使用use($model)
来进入函数的范围。
关于if语句if ($item['part_id'] === $model['id'])
,您只是访问匿名函数的第二个参数,并将索引['part_id']
所拥有的值与$model['id']
的值进行比较(也是一个数组)成立。
我希望这个解释有所帮助!