Inserting an array into another array with ColdFusion
I have some code that checks a form for errors and puts any in an array. The results might look something like this:
------------------------------------------------------------------------------------------
Array: Errors
------------------------------------------------------------------------------------------
name | Please enter your name.
------------------------------------------------------------------------------------------
questions | Please enter your questions or comments
------------------------------------------------------------------------------------------
I have another array that needs to contain the information from this array, which should look something like this:
------------------------------------------------------------------------------------------
Array: data
------------------------------------------------------------------------------------------
success | False
------------------------------------------------------------------------------------------
errors | name | Please enter your name.
------------------------------------------------------------------------------------------
| questions | Please enter your questions or comments
------------------------------------------------------------------------------------------
I can't for the life of me figure out how to get the first array into the second array. Following is the code I have so far:
<cfset errors = ArrayNew(2)><cfset data = ArrayNew(3)><cfif Trim(FORM.name) EQ ""> <cfset errors[1][1] = "name"> <cfset errors[1][2] = "Please enter your name."></cfif><cfif Trim(FORM.email) EQ "" OR NOT IsValid("email", FORM.email)> <cfset errors[2][1] = "email"> <cfset errors[2][2] = "Please enter a valid email."></cfif><cfif Trim(FORM.phone) EQ ""> <cfset errors[3][1] = "phone"> <cfset errors[3][2] = "Please enter your phone number."></cfif><cfif Trim(FORM.questions) EQ ""> <cfset errors[4][1] = "questions"> <cfset errors[4][2] = "Please enter your questions or comments."></cfif><cfif NOT Len(errors)> <cfset data[1][1] = "success"> <cfset data[1][2] = "false"> <cfset data[2][1] = "errors"> <cfset ArrayInsertAt(data[2], 2, errors)><cfelse> <cfset data[1][1] = "success"> <cfset data[1][2] = "true"> <cfset data[2][1] = "message"> <cfset data[2][2] = "Thank you for your inquiry! We'll be in touch with you soon."></cfif>
I'm a bit biased here, I don't like two-dimensional arrays for this purpose. So easy to get lost. Before answering your question directly, I would like to suggest changing your format to a simpler design. Your design also has the flaw that if the person leaves out their name and message, then you have an array with position 1 and 4 populated but not 2 and 3.
The following code uses names values instead of numbers (structures instead of arrays) and fills your error array in order (without skipping over numbers)
<!--- assume success ----><cfset data = structNew()><cfset data.status = "success"><cfset data.valid = true><cfset data.message = "Thank you for your inquiry! We'll be in touch with you soon."><cfset data.error = arrayNew(1)> <!--- empty error array ---><cfif Trim(FORM.name) EQ ""> <cfset pos = arrayLen(errors)+1> <cfset errors[pos] = structNew()> <cfset errors[pos].code = "Name"> <cfset errors[pos].message = "Please enter your name"></cfif><cfif Trim(FORM.name) EQ ""> <cfset pos = arrayLen(errors)+1> <cfset errors[pos] = structNew()> <cfset errors[pos].code = "email"> <cfset errors[pos].message = "Please enter a valid email"></cfif><cfif Trim(FORM.name) EQ ""> <cfset pos = arrayLen(errors)+1> <cfset errors[pos] = structNew()> <cfset errors[pos].code = "phone"> <cfset errors[pos].message = "Please enter your phone number"></cfif><cfif Trim(FORM.name) EQ ""> <cfset pos = arrayLen(errors)+1> <cfset errors[pos] = structNew()> <cfset errors[pos].code = "questions"> <cfset errors[pos].message = "Please enter your questions or comments"></cfif><cfif arrayLen(errors)> <cfset data.valid = false> <cfset data.message = "Please correct the following errors"> <cfset data.error = errors></cfif>
The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.
One of a set of tools we're offering as a way of saying thank you for being a part of the community.
The following code uses names values instead of numbers (structures instead of arrays) and fills your error array in order (without skipping over numbers)
Open in new window