检查树枝是否在给定数组中至少存在on属性

时间:2018-08-17 20:32:53

标签: twig frontend

假设我有一个数组$cars,其中$cars = [$toyota, $vw]

$toyota= [
    'id' => 1,
    'color' => 'green',
  ];

$vw= [
    'id' => 7,
    'color' => 'red',
  ];

我想在twig中进行检查,以查看至少一个汽车ID是否存在于专用阵列([3, ,7, 15])中。

执行此操作的最佳方法是什么?进行for循环是不理想的,因为如果我发现第一个符合条件的元素就无法进行break。如果两个元素都满足条件,我也不想打印两次文本。如果有一个元素,我只想打印文本。

我尝试做一些奇怪的事情 {% if cars in [3, 7, 15] %} .... {% endif %},但如果由于我需要检查汽车的id(而不是物体)而无法正常工作,则无法正常工作……

对于如何最好地解决此问题的任何建议,我们深表感谢。

P.S。我知道在控制器中使用array_filter可以使它变得更加容易,但是遗憾的是这对我不起作用。那是因为我使用AJAX,并且在提交后,我将无法再访问cars。因此,我需要在视图中执行此操作。

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作(请参阅https://twigfiddle.com/8u3eh5):

{% set found = false %}

{% for car in cars %}
    {% if car.id in ids %}
        {% set found = true %}
    {% endif %}
{% endfor %}

{% if found %}
    found
{% else %}
    not found
{% endif %}

但是,即使这是一个可行的解决方案,您也可以通过在PHP代码中实现此功能并公开Twig test这样的功能来获得更好的收益。

答案 1 :(得分:0)

只需将新的过滤器添加到'modules' => [ 'v1' => [ 'class' => 'app\api\modules\v1\Module', 'controllerNamespace' => 'app\api\modules\v1\controllers', ], 'user' => [ 'class' => 'dektrium\user\Module', 'admins' => ['your_admin_username'], 'enableRegistration' => false, 'enableConfirmation' => false, 'mailer' => ['welcomeSubject' => 'welcome in my application '], ], // ... ], // ...

twig

然后您可以在$twig = new Twig_Environment($loader); $twig->addFilter(new Twig_SimpleFilter('has', function($haystack, $needles) { if (!is_array($needles)) $needles = [ $needles, ]; return count(array_intersect($haystack, $needles)) > 0; });

中使用以下内容
twig