Php 细枝乱序数组,包括不应重复的';T
我有一个简单的值数组。我需要输出其内容的“随机”子集,但不能重复。然而,到目前为止,我得到的是包括副本 服务器没有安装Twig阵列扩展,因此我无法访问Shuffle筛选器 哦,如果有更好的方法,我愿意接受建议Php 细枝乱序数组,包括不应重复的';T,php,arrays,twig,Php,Arrays,Twig,我有一个简单的值数组。我需要输出其内容的“随机”子集,但不能重复。然而,到目前为止,我得到的是包括副本 服务器没有安装Twig阵列扩展,因此我无法访问Shuffle筛选器 哦,如果有更好的方法,我愿意接受建议 {% set arrImgs = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h'} %} {% set outputQty = 5 %} {% set randomizedArr = [] %} {#
{% 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 %}
{%set arrImgs={'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h'}%
{%set outputQty=5%}
{%set randomizedArr=[]%}
{#创建随机选择元素的新数组(只是为了无序排列顺序)
并将结果限制为outputQty#}
{对于0..100中的i,如果随机化DARR |长度<输出数量%}
{%SETTMPIMG=[随机(arrImgs)]%}
{如果tmpImg不在randomizedArr%}
{%set randomizedArr=randomizedArr |合并(tmpImg)%}
{%endif%}
{%endfor%}
{randomizedArr%中img的百分比}
{{img}},
{%endfor%}
由于有此功能的扩展,我建议尽可能安装它。当然,如果是的话,我想你会这么做的
您的代码并没有像现在这样工作,但将与几个关键的tweek一起工作
{% 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 %}
{%set arrImgs={'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h'}%
{%set outputQty=5%}
{%set randomizedArr=[]%}
{#创建随机选择元素的新数组(只是为了无序排列顺序)
并将结果限制为outputQty#}
如果outputQty
请注意,我在
for
循环中添加了一个检查,它将确保您不会通过请求比arrImgs
数组所能提供的更多的唯一项来创建无限循环。此外,您的检查不起作用,因为您的randomizedArr
从不包含任何散列项目,并且您将设置为tmpImg
散列,其中包含从arrImgs
中拾取的项目。通过将转换移动到has到实际的merge
调用,这个问题就解决了。由于有一个扩展,我建议尽可能安装它。当然,如果是的话,我想你会这么做的
您的代码并没有像现在这样工作,但将与几个关键的tweek一起工作
{% 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 %}
{%set arrImgs={'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h'}%
{%set outputQty=5%}
{%set randomizedArr=[]%}
{#创建随机选择元素的新数组(只是为了无序排列顺序)
并将结果限制为outputQty#}
如果outputQty
请注意,我在for
循环中添加了一个检查,它将确保您不会通过请求比arrImgs
数组所能提供的更多的唯一项来创建无限循环。此外,您的检查不起作用,因为您的randomizedArr
从不包含任何散列项目,并且您将设置为tmpImg
散列,其中包含从arrImgs
中拾取的项目。通过将转换移动到has到实际的merge
调用,这个问题就解决了