假设我有一个数组$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
。因此,我需要在视图中执行此操作。
答案 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