Question

Salut j'ai une boucle sorties

<cfloop collection="#SESSION.squad.achievements#" item="key">

Le problème est la clé (qui est une année) est sortie dans le mauvais ordre, il sorties

2009

2010

2011

Pour autant que je peux voir, il ne construit dans la méthode pour changer l'ordre ou que je manque quelque chose?

Était-ce utile?

La solution

structures Coldfusion ne sont pas un ordre, vous ne pouvez pas garantir lors de la boucle sur une struct que les clés sortiront dans le même ordre dans lequel ils ont été insérés (ou numérique / alphabétique / etc).

Si l'ordre est important, utilisez un tableau à la place.

Une alternative serait d'obtenir toutes les clés dans un tableau, puis pour ce tableau, et la boucle au-dessus, mais à l'intérieur de la boucle faisant référence à la structure.

<!--- get an array of the keys in the desired order --->
<cfset achievements = StructSort(SESSION.squad.achievements, "numeric", "desc")>

<!--- loop over that array --->
<cfloop index="year" array="#achievements#">
    <!--- refer back to the struct, keyed on the current year we're looping on --->
    #year# : #SESSION.squad.achievements[year]#
</cfloop>

Autres conseils

Au lieu de ceci:

<cfset SESSION.squad.achievements = StructNew() />

Utilisez ceci:

<cfset SESSION.squad.achievements = createObject("java", "java.util.LinkedHashMap").init() />

Ceci permettra de maintenir l'ordre.

Source: http: //www.aftergeek. com / 2010/03 / préservation structure-ordre de tri-in.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top