如何使用Coldfusion检查数组中的值?

时间:2009-12-08 17:29:16

标签: coldfusion

我有以下代码:

<cfset abcList = "*,B,b,A,C,a">
<cfset abcList=ListToArray(abcList,',')>

当我输出'abcList'时,它会给我一个值但是当我在'abcList'中使用<cfif>时,它无效。以下是创建问题的代码:

 <cfoutput>
   #abcList[1]# <!---This is giving '*' as Correct o/p--->
   <cfif #abcList[1]# eq '*'> <!---Here its going in else--->
     list has * at first place
    <cfelse>
     * is not first
   </cfif>
 </cfoutput>

有关我的代码中有什么问题的建议吗?

3 个答案:

答案 0 :(得分:4)

您不一定需要将列表转换为数组。如果从列表变量开始,可以使用Coldfusion列表函数执行相同的操作而不指定数组转换。

<cfset abcList = "*,B,b,A,C,a">
<cfif Compare(listGetAt(abcList, 1), '*') EQ 0>
    Match
<cfelse>
    No Match
</cfif>

请注意,Coldfusion的大多数字符串比较都不区分大小写。因此,如果您需要测试'B'与'b'不同,则需要使用compare() function或者使用其中一个正则表达式字符串函数。在这种情况下,如果字符串1等于字符串2,则compare()返回0.如果您不需要区分大小写,那么您可以进一步简化:

<cfset abcList = "*,B,b,A,C,a">
<cfif listGetAt(abcList, 1) EQ '*'>
    Match
<cfelse>
    No Match
</cfif>

答案 1 :(得分:3)

<cfset abcList = "*,B,b,A,C,a">
<cfset abc=ListToArray(abcList)>

<cfif #abc[1]# eq "*">OK<cfelse>FAIL</cfif>

<cfif abc[1] eq "*">OK<cfelse>FAIL</cfif>

为我打印“OK OK”。你可以重新确认它为你打印别的吗?

答案 2 :(得分:3)

对我来说也很好。也许你在列表值中有一些额外的空格?这会扭曲结果:

<cfset abcList = "#chr(32)#*,B,b,A,C,a">
<cfset abcList=ListToArray(abcList,',')>

<cfoutput>
   The value of abcList[1] = #abcList[1]# <br/>
   <cfif abcList[1] eq '*'> 
     list has * at first place
  <cfelse>
     The else condition was hit because abcList[1] is "(space)*" and not just "*" 
   </cfif>
 </cfoutput>

首先尝试修剪该值。此外,不需要围绕该值的#符号。

   <cfif trim(abcList[1]) eq '*'>
       .... 
   </cfif>

如果不起作用,则显示两个字符的ascii值。也许他们与你的想法不同。

<cfoutput>
   ASCII abcList[1] = #asc(abcList[1])# <br/>
   ASCII "*" = #asc("*")# <br/>
</cfoutput>