循环查询以创建手动 ArryOfStructs 数据
loop over a query to create an Manual ArryOfStructs Data
我有一个查询数据,想用它创建一个手动结构数组,我正在使用这段代码,但它似乎是错误的。我在这里缺少什么应该在这里做什么
for(i in myquery) {
st['Contact'][#i#]['ID'] = i.id;
st['Contact'][#i#]['Name'] = i.name;
st['Contact'][#i#]['Email'] = i.email;
}
您的代码存在一些问题。我要分解它:
假设您有如下查询结果:
myquery= queryNew(
"id, name, email",
"integer,varchar,varchar",
[
{"id":43,"name":"Antonio", "email": "antonio@somedomain.com"},
{"id":65,"name":"Manuel", "email": "manuel@somedomain.com"},
{"id":77,"name":"Paula", "email": "paula@somedomain.com"},
{"id":87,"name":"Jennifer", "email": "Jennifer@somedomain.com"}
]);
然后像您一样使用 for( row in query )
遍历(循环)您的查询是行不通的:
for( i in myquery ){
st['Contact'][#i#]['ID'] = i.id;
st['Contact'][#i#]['Name'] = i.name;
st['Contact'][#i#]['Email'] = i.email;
}
原因:
- 当使用
for( row in myquery )
时,您将逐行迭代查询。但是在你的循环中你想使用索引 i
来设置你的数组。那么,i
将不是您期望的数字整数,而是一个完整的行集。它会尝试使用完整的行作为索引,但这是行不通的。如果你需要一个索引,你还必须通过索引迭代你的查询,例如for (i = 1; i <= myquery.recordCount; i++)
。作为参考,请参阅如何按索引迭代查询,请参阅 cfdocs here,或者使用 ArrayAppend()
或 append()
成员而不使用任何索引。
- 你需要先将
st['Contact']
定义为一个数组,其中包含st['Contact']=[];
,否则CF会认为它是一个结构体
- 此外,您使用
i
设置数组,但使用 [#i#]
输出它而没有任何引号。在包含这样的引号的输出中使用 #
:st['Contact']['#i#']['ID']
或不包含这样的引号:st['Contact'][i]['ID']
。但不是这样的 st['Contact'][#i#]...
.
更正您的代码,使 st.Contact
填充为数组,它可能类似于:
选择1:使用ArrayAppend()
或append()
成员函数:
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append(
{"id": myquery.id,
"name": myquery.name,
"email": myquery.email
});
}
相同但更简单:
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append( i );
}
备选方案 2: 使用 for (i = 1; i <= myquery.recordCount; i++)
按索引迭代查询
st['Contact']=[];
for (i = 1; i <= myquery.recordCount; i++) {
st['Contact'][i]['ID'] = myquery.id[i];
st['Contact'][i]['Name'] = myquery.name[i];
st['Contact'][i]['Email'] = myquery.email[i];
}
如果在我提交的查询的帮助下转储变量 st
,您将获得以下数据结构(此处只是字符串化):
{"Contact":[
{"Name":"Antonio","ID":43,"Email":"antonio@somedomain.com"},
{"Name":"Manuel","ID":65,"Email":"manuel@somedomain.com"},
{"Name":"Paula","ID":77,"Email":"paula@somedomain.com"},
{"Name":"Jennifer","ID":87,"Email":"Jennifer@somedomain.com"}
]}
以下是两种备选方案的完整 cfscript 代码:
myquery= queryNew(
"id, name, email",
"integer,varchar,varchar",
[
{"id":43,"name":"Antonio", "email": "antonio@somedomain.com"},
{"id":65,"name":"Manuel", "email": "manuel@somedomain.com"},
{"id":77,"name":"Paula", "email": "paula@somedomain.com"},
{"id":87,"name":"Jennifer", "email": "Jennifer@somedomain.com"}
]);
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append(
{"id": myquery.id,
"name": myquery.name,
"email": myquery.email
});
}
dump(st);
// simplier version of above
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append( i );
}
dump(st);
st['Contact']=[];
for (i = 1; i <= myquery.recordCount; i++) {
st['Contact'][i]['ID'] = myquery.id[i];
st['Contact'][i]['Name'] = myquery.name[i];
st['Contact'][i]['Email'] = myquery.email[i];
}
dump(st);
我有一个查询数据,想用它创建一个手动结构数组,我正在使用这段代码,但它似乎是错误的。我在这里缺少什么应该在这里做什么
for(i in myquery) {
st['Contact'][#i#]['ID'] = i.id;
st['Contact'][#i#]['Name'] = i.name;
st['Contact'][#i#]['Email'] = i.email;
}
您的代码存在一些问题。我要分解它:
假设您有如下查询结果:
myquery= queryNew(
"id, name, email",
"integer,varchar,varchar",
[
{"id":43,"name":"Antonio", "email": "antonio@somedomain.com"},
{"id":65,"name":"Manuel", "email": "manuel@somedomain.com"},
{"id":77,"name":"Paula", "email": "paula@somedomain.com"},
{"id":87,"name":"Jennifer", "email": "Jennifer@somedomain.com"}
]);
然后像您一样使用 for( row in query )
遍历(循环)您的查询是行不通的:
for( i in myquery ){
st['Contact'][#i#]['ID'] = i.id;
st['Contact'][#i#]['Name'] = i.name;
st['Contact'][#i#]['Email'] = i.email;
}
原因:
- 当使用
for( row in myquery )
时,您将逐行迭代查询。但是在你的循环中你想使用索引i
来设置你的数组。那么,i
将不是您期望的数字整数,而是一个完整的行集。它会尝试使用完整的行作为索引,但这是行不通的。如果你需要一个索引,你还必须通过索引迭代你的查询,例如for (i = 1; i <= myquery.recordCount; i++)
。作为参考,请参阅如何按索引迭代查询,请参阅 cfdocs here,或者使用ArrayAppend()
或append()
成员而不使用任何索引。 - 你需要先将
st['Contact']
定义为一个数组,其中包含st['Contact']=[];
,否则CF会认为它是一个结构体 - 此外,您使用
i
设置数组,但使用[#i#]
输出它而没有任何引号。在包含这样的引号的输出中使用#
:st['Contact']['#i#']['ID']
或不包含这样的引号:st['Contact'][i]['ID']
。但不是这样的st['Contact'][#i#]...
.
更正您的代码,使 st.Contact
填充为数组,它可能类似于:
选择1:使用ArrayAppend()
或append()
成员函数:
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append(
{"id": myquery.id,
"name": myquery.name,
"email": myquery.email
});
}
相同但更简单:
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append( i );
}
备选方案 2: 使用 for (i = 1; i <= myquery.recordCount; i++)
st['Contact']=[];
for (i = 1; i <= myquery.recordCount; i++) {
st['Contact'][i]['ID'] = myquery.id[i];
st['Contact'][i]['Name'] = myquery.name[i];
st['Contact'][i]['Email'] = myquery.email[i];
}
如果在我提交的查询的帮助下转储变量 st
,您将获得以下数据结构(此处只是字符串化):
{"Contact":[
{"Name":"Antonio","ID":43,"Email":"antonio@somedomain.com"},
{"Name":"Manuel","ID":65,"Email":"manuel@somedomain.com"},
{"Name":"Paula","ID":77,"Email":"paula@somedomain.com"},
{"Name":"Jennifer","ID":87,"Email":"Jennifer@somedomain.com"}
]}
以下是两种备选方案的完整 cfscript 代码:
myquery= queryNew(
"id, name, email",
"integer,varchar,varchar",
[
{"id":43,"name":"Antonio", "email": "antonio@somedomain.com"},
{"id":65,"name":"Manuel", "email": "manuel@somedomain.com"},
{"id":77,"name":"Paula", "email": "paula@somedomain.com"},
{"id":87,"name":"Jennifer", "email": "Jennifer@somedomain.com"}
]);
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append(
{"id": myquery.id,
"name": myquery.name,
"email": myquery.email
});
}
dump(st);
// simplier version of above
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append( i );
}
dump(st);
st['Contact']=[];
for (i = 1; i <= myquery.recordCount; i++) {
st['Contact'][i]['ID'] = myquery.id[i];
st['Contact'][i]['Name'] = myquery.name[i];
st['Contact'][i]['Email'] = myquery.email[i];
}
dump(st);