CFLib.org – Common Function Library Project

StructOfArraysToStructOfStructs(struct, theKey[, cols])

Last updated August 2, 2003

author

Casey Broich

Version: 1 | Requires: CF5 | Library: DataManipulationLib

Description:
Converts a structure of arrays to a keyed structure of structs. In other words - taking a struct where each key is an array, it converts the struct into a struct of structs, where a particular key is used as the root key.

Return Values:
Returns a struct.

Example:

<cfscript>
  mystruct = structnew();
  mystruct.name   = listtoarray("Joe,Bob,Jim");
  mystruct.weight = listtoarray("140,180,160");
  mystruct.Age    = listtoarray("25,40,33");
  mystruct.ID    = listtoarray("1,2,3");
</cfscript>

Original:
<cfdump var="#mystruct#">

<p>
New Structure:
<cfset new = StructOfArraysToStructOfStructs(mystruct,"ID")>
<cfdump var="#new#">

Parameters:

Name Description Required
struct Struct to examine. Yes
theKey Key in structure to use as new primary key. Yes
cols Keys from original structure to use. Defaults to all. No

Full UDF Source:

/**
 * Converts a structure of arrays to a keyed structure of structs.
 * 
 * @param struct 	 Struct to examine. (Required)
 * @param theKey 	 Key in structure to use as new primary key. (Required)
 * @param cols 	 Keys from original structure to use. Defaults to all. (Optional)
 * @return Returns a struct. 
 * @author Casey Broich (cab@pagex.com) 
 * @version 1, August 2, 2003 
 */
function StructOfArraysToStructOfStructs(struct,thekey){ 
   var i = ""; 
   var ii = ""; 
   var new = structNew();
   var value = ""; 
   var cols = "";

   if(arrayLen(arguments) GT 2) cols = listToArray(arguments[3]);
   else cols = structkeyarray(struct); 

   for(i = 1; i lte arraylen(struct[thekey]); i = i + 1){
      new[struct[thekey][i]] = structNew();
      for(ii = 1; ii lte arraylen(cols); ii = ii + 1){
      if(structKeyExists(struct,cols[ii])){
         value = struct[cols[ii]][i];
      }else{
         value = "";
      }
      new[struct[thekey][i]][cols[ii]] = value;
      }
   }
   return new;
}
blog comments powered by Disqus

Search CFLib.org


Latest Additions

Kevin Cotton added
date2ExcelDate
May 5, 2016

Raymond Camden added
CapFirst
April 25, 2016

Chris Wigginton added
loremIpsum
January 18, 2016

Gary Stanton added
calculateArrival...
November 19, 2015

Sebastiaan Naafs - van Dijk added
getDaysInQuarter
November 13, 2015

Created by Raymond Camden / Design by Justin Johnson