2014-02-19 3 views
0

меня-структуру, как это:StructFindValue не работает, как ожидалось

SESSION.Auth.Access["1"]["2"]["Write"] 

Если я cfdump в #SESSION.Auth.Access#-структуру можно увидеть структуры в полном объеме, и это 100% имеет данные вложенных массивов.

Однако если я использую это заявление:

#StructFindValue(SESSION.Auth.Access["1"], '2', 'ALL')# 

я получаю пустой массив. Если я использую:

#ArrayLen(StructFindValue(SESSION.Auth.Access["1"], '2', 'ALL'))# 

Затем он возвращает ноль для длины массива.

Я делаю что-то явно неправильно или существует возможная строка/числовая проблема?

+1

Я не знаю, если это не так, или нет, но он уверен, выглядит сложным , Возможно, вы можете найти способ упростить его. –

ответ

6

Значит, ваша структура может быть написана так?

SESSION.Auth.Access = { 
    '1' = { 
     '2' = { 
      'Write' = 'foobar' 
     } 
    } 
} 

«2» является одним из ключевых, а не значение, так что вам нужно использовать StructFindKey вместо StructFindValue.

Действительно, это возвращает меня пустой массив:

<cfdump var="#StructFindValue(SESSION.Auth.Access['1'], '2', 'ALL')#"> 

Но это возвращает меня «Write» STRUCT

<cfdump var="#StructFindKey(SESSION.Auth.Access['1'], '2', 'ALL')#"> 
+6

@ volume один вы говорите в своем вопросе, что он «100% имеет данные во вложенных массивах». То, что duncan правильно указывает, что вы не используете массивы, но вы используете структуры. Похоже, что вы хотите определить, существует ли ключ «2» в структуре «Access [" 1 "], поэтому вы также можете просто использовать' StructKeyExists' так: 'structKeyExists (session.auth.access [' 1 '],' 2 ') ' –

+0

Спасибо, Шон, вместо этого я использовал StructKeyExists. Не знаю, почему я пошел по пути StructFindValue! –

Смежные вопросы