4

私は次の構造を持っており、私がやろうとしているのは、その中のさまざまなキー(personaID、personaName、userClubList)の変数を設定してから、userClubList配列内の値の変数を設定することですが、私のやり方がわかりません構造を調べて、どのキーを持っているか、そしてそれらのキーの値を調べます。

CF構造体

誰か助けてくれませんか?

4

2 に答える 2

2

実際には、すでにこの構造で作業でき、追加の変数へのマッピングは必要ありません。構造体へのアクセスは、ドット表記userAccountInfo.personasまたは角括弧を使用して行いますuserAccountInfo["personas"]。access を連鎖させることで、任意の構造の深さにアクセスできますuserAccountInfo.personas[1].userClubList[1].clubAbbrstructKeyExists(userAccountInfo, "personas")通常、 orを使用して、これらすべての構造体メンバー、特に配列の存在を確認する必要がありますisDefined("userAccountInfo.personas")(ただし、isDefined は、スコープの処理が緩いためお勧めしません)。structKeyExists(userAccountInfo.personas[1], "userClubList")各チェックで次のメンバーを渡すことにより、これらも連鎖structKeyExists(userAccountInfo.personas[1].userClubList[1], "clubAbbr")します。

とにかく、もう少しガイドするために、あなたの構造についての私の理解は次のとおりです。

<!--- test data (the one in your screenshot) --->
<cfset userAccountInfo = {}>
<cfset userAccountInfo.personas = []>
<cfset userAccountInfo.personas[1] = {}>
<cfset userAccountInfo.personas[1].personaId = "850074729">
<cfset userAccountInfo.personas[1].personaName = "IcedTube3">
<cfset userAccountInfo.personas[1].userClubList = []>
<cfset userAccountInfo.personas[1].userClubList[1] = {}>
<cfset userAccountInfo.personas[1].userClubList[1].clubAbbr = "Bel">
<cfset userAccountInfo.personas[1].userClubList[1].clubName = "Bell Ville FC">
<cfset userAccountInfo.personas[1].userClubList[1].established = "1363092161">
<cfset userAccountInfo.personas[1].userClubList[1].lastAccessTime = "1363092161">
<cfset userAccountInfo.personas[1].userClubList[1].platform = "360">
<cfset userAccountInfo.personas[1].userClubList[1].year = "2013">

<!--- let's make sure personas exists and is an array --->
<cfif structKeyExists(userAccountInfo, "personas") and isArray(userAccountInfo.personas)> 

    <cfset myPersonas = userAccountInfo.personas> <!--- myPersonas will be an array --->
    <cfloop array="#myPersonas#" index="persona"> <!--- persona is supposed to be a struct --->

        <!--- let's make sure each item in the array is really a struct --->
        <cfif isStruct(persona)>

            <cfoutput>Start reading persona.<br />====================<br /><br /></cfoutput>

            <!--- read personaId --->
            <cfif structKeyExists(persona, "personaId")>
                <cfoutput>personaId: #persona.personaId#<br /></cfoutput>
            <cfelse>
                <cfoutput>personaId: [none]<br /></cfoutput>
            </cfif>

            <!--- read personaName --->
            <cfif structKeyExists(persona, "personaName")>
                <cfoutput>personaName: #persona.personaName#<br /></cfoutput>
            <cfelse>
                <cfoutput>personaName: [none]<br /></cfoutput>
            </cfif>

            <!--- read userClubList (let's make sure userClubList exists in persona and is an array) --->
            <cfif structKeyExists(persona, "userClubList") and isArray(persona.userClubList) and not arrayIsEmpty(persona.userClubList)>

                <cfset myUserClubList = persona.userClubList>
                <cfloop array="#myUserClubList#" index="club"> <!--- club is supposed to be a struct --->

                    <!--- let's make sure each item in the array is really a struct --->
                    <cfif isStruct(club)>

                        <cfoutput><br />Start reading club.<br />--------------------<br /><br /></cfoutput>

                        <!--- read clubAbbr --->
                        <cfif structKeyExists(club, "clubAbbr")>
                            <cfoutput>clubAbbr: #club.clubAbbr#<br /></cfoutput>
                        <cfelse>
                            <cfoutput>clubAbbr: [none]<br /></cfoutput>
                        </cfif>

                        <!--- and so on... --->

                        <cfoutput><br />--------------------<br />Done reading club.<br /><br /></cfoutput>

                    </cfif>

                </cfloop>

            <cfelse>
                <cfoutput>userClubList: [none]<br /></cfoutput>
            </cfif>

            <cfoutput><br />====================<br />Done reading persona.<br /><br /></cfoutput>

        </cfif>

    </cfloop>

</cfif>

結果は...

Start reading persona.
====================

personaId: 850074729
personaName: IcedTube3

Start reading club.
--------------------

clubAbbr: Bel

--------------------
Done reading club.


====================
Done reading persona.

お役に立てれば。:)

于 2013-03-12T23:57:36.953 に答える
2

実際、これはすべて、最終的な目標が何であるかによって異なります。上記の構造体に表示されているデータ モデルを見ると、複数の userClubList に属する複数のペルソナを持つことができる 1 つのユーザー アカウントに対して 1 つのレコードを作成しています。以下のコードは、データを取り込む方法を示しています。

注: この形式は CF8+ で機能します。

<cfscript>
 userAccountInfo = {
    userAccountInfo = {
    personas = [ 
            {
            personaID = "850074729",
            personaName = "IcedTube3",
            userClubList =  [
                                {
                                clubAbbr = "Bel",
                                clubName = "Bel Ville FC",
                                established = "1361354191",
                                lastAccessTime = "1363092161",
                                platform = "360",
                                year = "2013"
                                },
                                {
                                clubAbbr = "New",
                                clubName = "New Club",
                                established = "1362139200",
                                lastAccessTime = "1363092161",
                                platform = "720",
                                year = "2012"
                                },
                                {
                                clubAbbr = "Old",
                                clubName = "Old Club",
                                established = "1261255543",
                                lastAccessTime = "1267444800",
                                platform = "180",
                                year = "2005"
                                }
                            ]
            },
            {
            personaID = "499137600",
            personaName = "Marty",
            userClubList =  [
                                {
                                clubAbbr = "Biff",
                                clubName = "BiffCo Casino",
                                established = "307588800",
                                lastAccessTime = "1445390400",
                                platform = "1955a",
                                year = "1985"
                                }
                            ]
            }
        ]
    }
    } ;
</cfscript>

<cfdump var="#userAccountInfo#" label="UserAccountInfo" />
于 2013-03-13T01:27:16.450 に答える