объекты сеанса, которые имеют массивы в массиве - PullRequest
1 голос
/ 28 июля 2010

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

Так что мне нужно в основном работать с 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 массива внутри одного Aray / Shirts?Эта "Рубашка" содержит по меньшей мере 150 других различных элементов, которые отправляются в сессию.Помогите пожалуйста.Xain Hu

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

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

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

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

1 голос
/ 02 августа 2010

Вы можете без проблем выстрелить в корзину с помощью 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...