我有一个简单的数组。我需要输出"随机"其内容的子集但没有重复。但是,到目前为止我所得到的包括重复内容。
服务器没有安装Twig Array Extension,因此我无法访问Shuffle过滤器。
哦,如果有更好的方法,我可以接受建议。
{% set arrImgs = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h'} %}
{% set outputQty = 5 %}
{% set randomizedArr = [] %}
{# create new array of randomly selected elements (just to shuffle the order)
and limit the result to outputQty #}
{% for i in 0..100 if randomizedArr|length < outputQty %}
{% set tmpImg = [random(arrImgs)] %}
{% if tmpImg not in randomizedArr %}
{% set randomizedArr = randomizedArr|merge(tmpImg) %}
{% endif %}
{% endfor %}
{% for img in randomizedArr %}
{{ img }},
{% endfor %}
答案 0 :(得分:0)
由于有一个扩展,我建议尽可能安装它。当然,我认为如果是的话你就会这样做。
您的代码不能正常工作,但可以使用几个关键的推文。
{% set arrImgs = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h'} %}
{% set outputQty = 5 %}
{% set randomizedArr = [] %}
{# create new array of randomly selected elements (just to shuffle the order)
and limit the result to outputQty #}
{% for i in 0..100 if outputQty < arrImgs|length and randomizedArr|length < outputQty %}
{% set tmpImg = random(arrImgs) %}
{% if tmpImg not in randomizedArr %}
{% set randomizedArr = randomizedArr|merge([tmpImg]) %}
{% endif %}
{% endfor %}
{% for img in randomizedArr %}
{{ img }},
{% endfor %}
请注意,我在for
循环中添加了一个检查,以确保您不会通过请求比arrImgs
数组提供的更多唯一项来创建无限循环。此外,您的支票无效,因为您的randomizedArr
从不包含任何哈希值,并且set
tmpImg
arrImgs
包含您从merge
选择的项目的哈希值。通过将转换移至实际的use parent 'Foo::Bar';
调用,此问题已得到解决。