CFIF 对于数组变量并不总是存在

CFIF For array variable not always existing

我正在尝试获取一个会话变量并将其分解成一个数组,以便创建单独的会话变量。

我想做的是用一个文本框来查找长度的英尺和英寸。例如 15.2 将是 15 英尺 2 英寸

<cfif isDefined("session")
        and structKeyExists(session, 'checkout') 
            and structKeyExists(session.checkout, 'vehicle') 
                and structKeyExists(session.checkout.vehicle, 'ft') >
<cfset Feet = "#session.checkout.vehicle.ft#" />
<cfset FeetArray = listtoarray(Feet, ".") />
<cfdump var="#FeetArray#">
</cfif>

然后我可以使用#FeetArray[1]# & #FeetArray[2]# 来表示英尺和英寸。

我遇到的困难是有时无法输入英寸,因此有时不需要 FeetArray[2]。

我尝试使用:

<cfif isDefined("#FeetArray[2]#")>
<cfif isDefined("FeetArray[2]")>

它们都不起作用我只是想知道是否有人可以指导我正确的方向!

您可以检查数组的长度,并据此进行编码。

<cfif isDefined("session") and structKeyExists(session, 'checkout') and structKeyExists(session.checkout, 'vehicle') and structKeyExists(session.checkout.vehicle, 'ft') >
    <cfset Feet = "#session.checkout.vehicle.ft#" />
    <cfset FeetArray = listToArray(Feet, ".") />
    <cfif arrayLen(FeetArray) EQ 1>
        code when there is feet available
    <cfelse>
        code when there are both feet and inches available
    </cfif>
</cfif>

要检查数组中的元素是否存在,请使用(命名不当的)arrayIsDefined() 函数:

<cfif arrayIsDefined(FeetArray, 2)>

请注意:您真的不应该像这样对业务逻辑代码使用基于标记的语法。在属于您的视图中保留您的标签。