?
Solved

Inserting an array into another array with ColdFusion

Posted on 2014-01-30
3
Medium Priority
?
201 Views
Last Modified: 2014-01-30
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>

Open in new window


The ArrayInsertAt obviously doesn't work, it's just the latest in my string of failed attempts. What should I be doing here? Thanks!
0
Comment
Question by:SiobhanElara
3 Comments
 
LVL 39

Accepted Solution

by:
gdemaria earned 2000 total points
ID: 39821338
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>

Open in new window

0
 
LVL 53

Expert Comment

by:_agx_
ID: 39821466
(no points ...)

FWIW - I completely agree with gdemaria.  His approach is much more intuitive.
0
 

Author Closing Comment

by:SiobhanElara
ID: 39821691
That is SO much better! Thank you.
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Hi, I will be creating today a basic tutorial on how we can create a Mail Custom Function and use it where ever we want. The main advantage about creating a custom function is that we can accommodate a range of arguments to pass to the Function and …
PROBLEM:  How to open a cfwindow or run a function on double click of a cfgrid row. One of my clients wanted to be able to double click on a row item to get more detailed information about a transaction and to be able to modify the line items i…
Kernel Data Recovery is a renowned Data Recovery solution provider which offers wide range of softwares for both enterprise and home users with its cost-effective solutions. Let's have a quick overview of the journey and data recovery tools range he…
This video tutorial shows you the steps to go through to set up what I believe to be the best email app on the android platform to read Exchange mail.  Get the app on your phone: The first step is to make sure you have the Samsung Email app on your …

616 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question