如何在Twig上删除数组中的重复项?
我在树枝上有数组值,比如.
{{ set array = ["testA","testB","testA","testC","testB"] }}
Run Code Online (Sandbox Code Playgroud)
我想删除重复的项目,只使用testA,testB,testC
{% for name in array%}
//skip the duplicate items and use only testA,testB,testC
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
Web*_*rig 49
Twig是一个VIEW引擎,在理论上不应该用来操纵数据.使用(假设)PHP收集数据,执行所有必要的操作然后将正确的数据传递给您的视图是一种(非常)良好的做法.
也就是说,这是你可以用纯Twig语法做到的:
{% set newArray = [] %}
{% for name in array %}
{% if name not in newArray %}
My name is {{name}}
{% set newArray = newArray|merge([name]) %}
{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
COi*_*Oil 15
在这种情况下,正如@Webberig所说,在渲染视图之前准备数据会更好.但是当你有一个更复杂的过程并且如果与视图相关时你可以创建一个Twig扩展,扩展名代码如下所示:
MyTwigExtension.php
对于Twig版本1.12及更高版本:
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('array_unset', array($this, 'arrayUnset'))
);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是早于1.12的Twig版本,请MyTwigExtension.php
改用:
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return array(
'array_unset' => new \Twig_Function_Method($this, 'arrayUnset')
);
}
Run Code Online (Sandbox Code Playgroud)
/**
* Delete a key of an array
*
* @param array $array Source array
* @param string $key The key to remove
*
* @return array
*/
public function arrayUnset($array, $key)
{
unset($array[$key]);
return $array;
}
Run Code Online (Sandbox Code Playgroud)
枝条:
{% set query = array_unset(query, 'array_key') %}
Run Code Online (Sandbox Code Playgroud)
从 Twig 1.41 和 2.10 开始,您可以在一行中完成:
{% set unique = array|reduce(
(unique, item) => item in unique ? unique : unique|merge([item]), []
) %}
Run Code Online (Sandbox Code Playgroud)
在你的例子中:
{% for name in array|reduce((unique, item) => item in unique ? unique : unique|merge([item]), []) %}
My name is {{name}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)