2016-05-15 5 views
0

は、私は次のforeach文をしている:この場合foreachではなくarray_mapを使用できますか?

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


// Somewhere down the class I have 
public function checkUri($uri) 
{ 
    return request()->is($uri); 
} 

が、文はtrueすべての時間であるように思われれば:代わりに、私はそうのような配列マップを使用しようとした

$classes = ''; 

foreach($uriSet as $uri) { 
    if (request()->is($uri)) { 
     $classes .= 'active'; 
    } 
} 

。同じ方法で別の方法で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を()あなたはLaravelを使用しているので

var_dump((bool) array(12)); // bool(true) 
var_dump((bool) array()); // bool(false) 
0

は、あなたがCollectionクラスのcontainsメソッドを利用することができますに渡された配列の数 と一致する必要があります:

if (collect($uriSet)->contains([$this, 'checkUri'])) { 
    $classes .= 'active'; 
} 
関連する問題