2016-05-15 50 views
0

我有以下foreach语句:是否可以在这种情况下使用array_map而不是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); 
} 

但如果声明似乎是true所有的时间。我想提取到一个单独的方法,因为我将以相同的方式在其他地方使用checkUri方法,但之后做一个不同的操作(不像我这里设置类名)。

回答

0

我设法与array_filter要做到这一点,而不是像这样:

if (array_filter($uriSet, [$this, 'checkUri'])) { 
    $classes .= 'active'; 
} 
0

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) 
0

由于您使用Laravel,你可以利用在Collectioncontains方法阵列数量 :

if (collect($uriSet)->contains([$this, 'checkUri'])) { 
    $classes .= 'active'; 
} 
相关问题