arrayGroupsOf(arrObj, intGroup [, padding])
Last updated February 4, 2010
Version: 1 | Requires: ColdFusion MX | Library: DataManipulationLib
Description:
Splits or iterates over the array in number of groups,
padding any remaining slots with custom strings unless it is empty. It's a big helper for the presentation layer where sometimes it's necessary to display data broken down into columns.
Return Values:
Returns an array.
Example:
"Blackberry", "Strawberry", "Grape", "Mango",
"Clementine", "Cherry", "Plum", "Guava",
"Cranberry"]>
<table border="1">
<cfoutput>
<cfloop array="#arrayGroupsOf(ArrFruits, 5, 'not set')#" index="arrFruitsIX">
<tr>
<cfloop array="#arrFruitsIX#" index="arrFruit">
<td>#arrFruit#</td>
</cfloop>
</tr>
</cfloop>
</cfoutput>
</table>
Parameters:
| Name | Description | Required |
|---|---|---|
| arrObj | Array to split up in groups. | Yes |
| intGroup | Number of items allowed on each group. | Yes |
| padding | What should it be filled with in case there's empty slots. | No |
Full UDF Source:
<!---
Splits or iterates over the array in number of groups.
@param arrObj Array to split up in groups. (Required)
@param intGroup Number of items allowed on each group. (Required)
@param padding What should it be filled with in case there's empty slots. (Optional)
@return Returns an array.
@author Marcos Placona (marcos.placona@gmail.com)
@version 1, February 4, 2010
--->
<cffunction name="arrayGroupsOf" access="public" output="false" returntype="array">
<cfargument name="arrObj" type="array" required="true" hint="An array object that will be split up in groups">
<cfargument name="intGroup" type="numeric" required="true" hint="Number of items on each group">
<cfargument name="padding" type="string" required="false" default=" " hint="What should it be filled with in case there's empty slots">
<cfset var resArray = createObject("java", "java.util.ArrayList").Init(arguments.arrObj) />
<cfset var arrGroup = arrayNew(1) />
<cfset var arrObjGroup = arrayNew(1) />
<cfset var arrObjSize = resArray.size()>
<cfset var subStart = 0>
<cfset var subEnd = arguments.intGroup>
<cfset var ii = "">
<cfset var difference = "">
<cfset var jj = "">
<cfset arrGroupSize = ceiling(arrObjSize / arguments.intGroup)>
<cfset arrArrayGroupSize = arrGroupSize * arguments.intGroup>
<cfif arrArrayGroupSize GT arrObjSize>
<cfset difference = arrArrayGroupSize - arrObjSize>
<cfloop from="1" to="#difference#" index="ii">
<cfset resArray.add(arguments.padding) />
</cfloop>
</cfif>
<cfloop from="1" to="#arrGroupSize#" index="jj">
<cfset arrGroup = resArray.subList(subStart, subEnd)>
<cfset arrayAppend(arrObjGroup, arrGroup)>
<cfset subStart = subStart + arguments.intGroup>
<cfset subEnd = subEnd + arguments.intGroup>
<cfset arrGroup = arrayNew(1) />
</cfloop>
<cfreturn arrObjGroup>
</cffunction>
Search CFLib.org
Latest Additions
Ryan Thompson-Jewell added
ListSplit
3 day(s) ago
Nathan Dintenfass added
RowsToColumns
3 day(s) ago
Barney Boisvert added
indentXml
3 day(s) ago
Barney Boisvert added
REReplaceCallbac...
3 day(s) ago
Top Rated
FolderSize
Rated 5.0, 7 time(s)
UniqueValueList
Rated 5.0, 5 time(s)
QuickSort
Rated 5.0, 3 time(s)
ListDeleteDuplic...
Rated 5.0, 3 time(s)