在这种情况下是否可以使用array_map而不是foreach?

时间:2016-05-15 20:35:37

标签: php laravel laravel-5

我有以下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语句似乎始终为true。我想将它提取到一个单独的方法中,因为我将以相同的方式在其他地方使用checkUri方法,但之后执行不同的操作(不像我在这里设置类名)。

3 个答案:

答案 0 :(得分:0)

我设法用array_filter来做这件事,就像这样:

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

答案 1 :(得分: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)

答案 2 :(得分:0)

由于您正在使用Laravel,因此您可以使用item.poll类上的contains方法:

Collection