我有以下foreach语句:
$classes = '';
foreach($uriSet as $uri) {
if (request()->is($uri)) {
$classes .= 'active';
}
}
相反,我尝试使用这样的数组映射:
if (array_map([$this, 'checkUri'], $uriSet)) {
$classes .= 'active';
}
// Somewhere down the class I have
public function checkUri($uri)
{
return request()->is($uri);
}
但if语句似乎一直是CCD_ 1。我想将其提取到一个单独的方法中,因为我将以相同的方式在其他地方使用checkUri
方法,但之后会执行不同的操作(而不是像这里那样设置类名)。
我用array_filter实现了这一点,就像这样:
if (array_filter($uriSet, [$this, 'checkUri'])) {
$classes .= 'active';
}
array_map()
返回一个数组,因此只有当它返回一个空数组时,if
语句才会是false
。
http://php.net/manual/en/function.array-map.php
array array_map ( callable $callback , array $array1 [, array $... ] )
array_map()返回一个数组,该数组包含array1的所有元素在对每个应用回调函数之后。的编号回调函数接受的参数应该与数字匹配传递到array_map()的数组数
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
由于您使用的是Laravel,因此可以在Collection
类上使用contains
方法:
if (collect($uriSet)->contains([$this, 'checkUri'])) {
$classes .= 'active';
}