2016-05-15 49 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'; 
} 
相關問題