2009-06-25 8 views
4

J'ai un tableau à deux dimensions. J'écris 3 valeurs dans le tableau pendant son initialisation et j'ajoute une quatrième valeur si une valeur de tableau n'est pas égale à une valeur passée à travers un formulaire. Ensuite, je veux vérifier, si la quatrième valeur existe.ColdFusion: Comment vérifier si un certain élément existe dans un tableau à deux dimensions?

update.cfm

<cfset array = obj.getArray() /> 
<cfif not StructIsEmpty(form)> 
    <cfloop collection="#form#" item="key"> 
    <cfif left(key,3) eq "ID_"> 
     <cfset number = listLast(key,"_") /> 
     <cfset value = evaluate(0,key) /> 
     <cfloop index="j" from="1" to="#arrayLen(array)#"> 
     <cfif (array[j][1] eq number) and (array[j][3] neq value)> 
      <cfset array[j][3] = value /> 
      <cfset array[j][4] = "true" /> 
     </cfif> 
     </cfloop> 
    </cfif> 
    </cfloop> 
<cfset obj = createObject("component", "cfc.Obj").init(arg = form.arg, argarray = array) /> 
<cfset application.objDao.update(obj) /> 

objDao.cfc méthode update

<cfset matarray = arguments.obj.getArray() /> 
    <cfloop index="i" from="1" to="#arrayLen(array)#"> 
    <cfquery name="qUpdateAsset" datasource="#variables.instance.dsn#"> 
     UPDATE table 
     SET value = <cfqueryparam value="#matarray[i][3]#" cfsqltype="cf_sql_integer" /> 

    <!--- This is wrong, how do i check the existence correctly? ---> 
    <cfif StructKeyExists(matarray[i],"4")> 
     ,status = 'true' 
    </cfif> 

     WHERE arg = <cfqueryparam value="#arguments.obj.getArg()#" cfsqltype="cf_sql_smallint" /> 
     AND number = <cfqueryparam value="#matarray[i][1]#" cfsqltype="cf_sql_integer" /> 
    </cfquery> 
</cfloop> 

Mes mauvais résultats de la tentative de cette erreur:

You have attempted to dereference a scalar variable of type class coldfusion.runtime.Array as a structure with members.

Répondre

8

Je crois que vous avez juste besoin de vérifier la longueur du tableau comme ceci:

<cfif ArrayLen(matarray[i]) gte 4> 
     ,status = 'true' 
</cfif> 
+0

qui a fait l'affaire – mrt181

-3

Eh bien pour commencer, je ne suis pas énorme mec Cold Fusion ... mais je suis sûr que vous ne pouvez pas utiliser StructKeyExists sur un tableau, car ce n'est pas une structure.

Aussi, avez-vous essayé quelque chose comme

<cfset testValue = matarray[i][4]> 
<cfif isDefined testValue> 
    ... 
</cfif> 
+0

vous êtes bien sûr raison, me stupide – mrt181