2010-07-28 1 views
1

Мне нужно создать корзину покупок, таких как Shirts, CompanyText, Desiner_Names, Company, Cons_Name, DSNR_Cert_Number, DSNR_Cert_Issued_Date и т. Д. Здесь «Рубашки, CompanyText, Desiner_Names» все типа Array переменные, где «Рубашки» являются основным массивом.объекты сеанса, у которых есть массивы в массиве

Так что мне нужно в основном работать с массивом, который имеет внутри него 2 разных массива вместе с другими переменными два массива внутри массива. Код

<!--- create a MAIN array ---> 
<cfset Shirts= ArrayNew(1) /> 
<!--- "Cons_Code" is the key value taken from "Cons_name" and "Company_Text_Code" 
    Also every time a user selects a new "Shirt", a new key "Cons_Code" is created ---> 
<cfset Cons_Code = 2 > 
<!--- create a structure ---> 
<cfset stShirts[Cons_Code] = StructNew() /> 
<!--- assign values to our structure ---> 
<cfset stShirts[Cons_Code].Company_Text_Code = "" /><!--- 
<cfset stShirts[Cons_Code].CompanyText = "333" />---> 
<cfset stShirts[Cons_Code].Desiner_Names = ArrayNew(1) /> 
<cfset stShirts[Cons_Code].Desiner_Names[1] = "PARIS" /> 
<cfset stShirts[Cons_Code].Desiner_Names[2] = "LONDON" /> 
<cfset stShirts[Cons_Code].Desiner_Names[3] = "MILAN" /> 
<cfset stShirts[Cons_Code].CompanyText = ArrayNew(1) /> 
<cfset stShirts[Cons_Code].CompanyText[1] = "perryellis" /> 
<cfset stShirts[Cons_Code].CompanyText[2] = "arrow" /> 
<cfset stShirts[Cons_Code].CompanyText[3] = "polo" /> 
<cfset stShirts[Cons_Code].Cons_Name = "" /> 
<cfset stShirts[Cons_Code].DSNR_Cert_Number = "" /> 
<cfset stShirts[Cons_Code].DSNR_Cert_Issued_Date = "" /> 
<cfset ArrayAppend(Shirts, StructCopy(stShirts[Cons_Code])) /> 
<!--- store structure in our array ---> 

<cfoutput> 
    <cfloop from="1" to="#ArrayLen(Shirts)#" index="row"> 
    Row #row#: 
     #Shirts[row].CompanyText[1]#, 
     #Shirts[row].Desiner_Names[2]#,  
     #Shirts[row].Cons_Name#<br /> 
     #Shirts[row].DSNR_Cert_Issued_Date#<br /> 
    </cfloop> 
</cfoutput> 

Иногда я получаю ошибку

"You have attempted to dereference a scalar variable " 

Также я делаю правильно, имея 2 массивов внутри один за другим Арай/Рубашки? Эти «рубашки» содержат по меньшей мере 150 других вайрабов, которые входят в сеанс. Помощь pleez. Xain Hu

+2

, что линия бросания ошибки – jarofclay

+0

Xian

+2

Является ли этот код частью функция или метод ХФУ? Возможно, вы неправильно используете область действия и конфликтуют ключи/данные. – Sergii

ответ

2

Вы закомментирована

<cfset stShirts[Cons_Code].CompanyText = "333" /> 

Я подозреваю, что вы все еще есть что-то подобное в вашем коде где-то, хотя. В основном, ваша ошибка говорит вам, что вы используете нотацию массива или структуры, чтобы попытаться получить доступ к переменной, но эта переменная не является структурой или массивом.

+0

по-прежнему та же ошибка – Xian

+1

«По-прежнему такая же ошибка» после чего? Сергия права - вам нужно предоставить больше информации, прежде чем мы сможем вам помочь. Прямо сейчас у нас очень мало информации о том, что происходит на самом деле. –

1

Вы можете решить стрелять в корзину с помощью cfdump. Разбейте каждую фазу, которая сделает тележку, и проверьте, выполняет ли она то, что она должна делать. Как только он сделал то, что ему нужно сделать, вы можете собрать его вместе.

При запуске cfdump после этой строки,

<!--- store structure in our array ---> 
<cfdump var="#stshirts#"> 

вы заметите, что первый индекс в массиве не определен, а второй будет иметь структуру вместе с данными подразделов.

Не хотите ли вы, чтобы массив динамически заполнил себя, чтобы у вас не было никаких пустых индексов? Вам также не нужно беспокоиться о создании собственного уникального индекса, просто прокормируйте структуру данными, которые вы получили, а затем добавьте в массив.

<cfoutput> 
#ArrayAppend(ArrayName, "#StrucureName#")# 
</cfoutput> 

С выше, вы сможете добавить структуру в массив, до тех пор, пока массив был определен до выполнения этого кода. Индекс в массиве будет динамически добавляться или удаляться соответствующим образом, оставляя последовательный индекс без пробелов.

Если вы хотите, чтобы получить что-нибудь из вашей структуры,

<cfloop index="i" from="1" to="#ArrayLen(ArrayName)#"> 
<cfoutput> 
    #ArrayName[i].NameOfKeyInStructure# 
</cfoutput> 
</cfloop> 
Смежные вопросы