2016-01-28 21 views
1

我有一個簡單的數組值。我需要輸出一個「隨機」的內容子集,但沒有重複。但是,到目前爲止我所得到的信息包括重複信息。枝條洗過的陣列包括重複時不應該

服務器沒有安裝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

由於這是一個擴展,我會建議如果可能的話安裝它。當然,如果是的話,我認爲你會這麼做。

您的代碼並不像現在這樣工作,但可以使用幾個關鍵的tweeks。

{% 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 ing tmpImg包含您從arrImgs中挑選的項目的散列。通過將轉換移至實際的merge調用,此問題已解決。