2012-02-20 4 views
1

J'ai une structure qui est dans un tableau qui est imbriqué dans une autre structure, comme suit: Arguments.cart.data.Items[x].Labels.Pkg.Title (x est un index, car je boucle sur Items).Rechercher une structure imbriquée dans un tableau

Items est un tableau en Labels, Pkg et Title sont imbriquées struct.

Title n'existe pas toujours. Donc, je voudrais vérifier pour cela. Cependant, l'utilisation structFindKey renvoie une erreur

Vous avez essayé de déréférencer une variable scalaire de classe de type coldfusion.runtime.Array comme une structure avec les membres

je pouvais regarder à l'intérieur Arguments.cart.data; Toutefois, s'il existe plusieurs lignes dans le tableau, certaines lignes peuvent contenir Title alors que d'autres ne le font pas. Donc, je veux vérifier Title à l'intérieur de chaque Items.

J'ai aussi essayé arrayFind, mais je reçois l'erreur

Struct ne peut pas être utilisé comme un tableau

Je suis un peu perdu.

Répondre

4

Cela fera le travail

<cfscript> 
    for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) { 
     tempI = arguments.cart.data.Items[i]; 
     if (IsDefined('tempI.Labels.Pkg.Title')) { 
      // It exists 
     } else { 
      // It doesn't 
     } 
    } 
</cfscript> 

IsDefined ne joue pas bien avec des tableaux, mais en attribuant à chaque élément du tableau à la valeur de température, vous êtes alors en mesure d'y faire référence dans les IsDefined.

Sinon, vous pouvez faire ce qui suit, si vous préférez StructKeyExists

<cfscript> 
    for (i=1;i<=ArrayLen(arguments.cart.data.Items);i++) { 
     tempI = arguments.cart.data.Items[i]; 
     if (
      StructKeyExists(tempI,'Labels') 
      && StructKeyExists(tempI.Labels,'Pkg') 
      && StructKeyExists(tempI.Labels.Pkg,'Title') 
     ) { 
      // It exists 
     } else { 
      // It doesn't 
     } 
    } 
</cfscript> 
1

J'ai déjà rencontré cela dans le passé. Il suffit de coller votre tableau dans une structure temporairement ... cela va tromper structFindKey() et structFindValue() pour fonctionner correctement.

Questions connexes