У меня есть массив структур в ColdFusion.Я хотел бы сгруппировать результаты по одному элементу и отсортировать их на основе нескольких других атрибутов структур.Какой самый эффективный и современный способ достичь этого?Я могу изменить порядок сортировки запроса, если мне нужно.
Например, теперь у меня он сначала отсортирован по заголовку, сгруппирован по нему, сравнивая текущий заголовок цикла с предыдущим, и если он имеетизменилось я увидел новый.
myArray[1]
struct
Title = Heading 1
Description = lorem ipsum
Field 2 = this has to be second #1
Field 1 = this has to be first #1
Field 3 = this has to be third #1
myArray[2]
struct
Title = Heading 1
Field 3 = this has to be third #2
Field 1 = this has to be first #2
Description = dolor sit amet
Field 2 = this has to be second #2
myArray[3]
struct
Title = Heading 2
Description = onsectetur adipiscing elit.
Field 1 = this has to be first #3
Field 2 = this has to be second #3
Field 3 = this has to be third #3
myArray[3]
struct
Title = Heading 2
Description = Nullam ultrices
Field 1 = this has to be first #4
Field 2 = this has to be second #4
Field 3 = this has to be third #4
Нужно сгруппировать и отсортировать результаты следующим образом:
Heading 1 = show ONE time because it is the title that I want to group the results
dolor sit amet = sorted descriptions (this can be done from the SQL Query)
lorem ipsum = sorted descriptions (this can be done from the SQL Query)
this has to be first #1 = sorted Fields (this can be done from the SQL Query)
this has to be second #1
this has to be third #1
this has to be first #2
this has to be second #2
this has to be third #2
--
Heading 2
onsectetur adipiscing elit.
Nullam ultrices
this has to be first #3
this has to be second #3
this has to be third #3
this has to be first #4
this has to be second #4
this has to be third #4
```
<cfif myArray[i].Title neq local.prevTitle>
<h2>#Title#/h2>
</cfif>
<cfif myArray[i].Title neq local.prevTitle>
<ul>
</cfif>
<li>#Description#</li>
<li>#Field1#</li>
<li>#Field2#</li>
<li>#Field3#</li>
<cfif i neq arrayLen(myArray) AND myArray[i+1].Title neq myArray[i].Title>
</ul>
</cfif>
<cfif i eq arrayLen(myArray)>
</ul>
</cfif>
<cfset prevTitle= myArray[i].Title />
Мне также нужно добавить элементы HTML перед заголовком группы и после группы результатов.Например, чтобы показать <hr>
перед началом показа новых сгруппированных результатов.Я сделал несколько проверок, если есть другой элемент в массиве, и если он не последний, и название изменилось, чтобы показать HR.Примерно так:
<cfif i neq arrayLen(myArray) AND myArray[i+1].Title neq myArray[i].Title>
<hr />
</cfif>
Но я подумал, что должен быть более эффективный и современный способ сделать это. Так что, если у кого-нибудь есть какие-либо предложения, я бы с удовольствием его прочитал.
Спасибовы!