Struct 嵌套结构排序不正确
我正在循环查询,构建一个结构数组Struct 嵌套结构排序不正确,struct,coldfusion,cfml,lucee,cfloop,Struct,Coldfusion,Cfml,Lucee,Cfloop,我正在循环查询,构建一个结构数组 <cffunction name="QueryConvert" returntype="any" output="false"> <cfargument name="q" type="query" required="yes"> <cfargument name="page" type="numeric" required="no" default="1"> <cfargument name="r
<cffunction name="QueryConvert" returntype="any" output="false">
<cfargument name="q" type="query" required="yes">
<cfargument name="page" type="numeric" required="no" default="1">
<cfargument name="rows" type="numeric" required="no" default="500">
<cfset var result = structnew()>
<cfset var rowStruct = structnew()>
<cfset var col = "">
<cfset result["page"] = arguments.page>
<cfset result["total"] = ceiling(arguments.q.TotalrecordCount/arguments.rows)>
<cfset result["records"] = arguments.q.TotalrecordCount>
<cfset result["rows"] = arraynew(1)>
<cfset queryDeleteColumn(arguments.q,'TotalrecordCount')>
<cfset queryDeleteColumn(arguments.q,'rowNum')>
<cfset columnLabels = QueryColumnArray(arguments.q)>
<cfset rowStruct = [:]><!--- Tada an ordered struct --->
<cfloop array="#columnLabels#" item="col">
<cfset rowStruct[col] = q["#col#"]>
</cfloop>
<cfdump var="#result#" abort>
<cfreturn result />
</cffunction>
但是,当我查看嵌套结构时,键的顺序都混淆了。我希望它们与数据库表中列名的顺序相匹配 简而言之,您需要使用有序结构。长版本如下所示: 首先,我们需要看一些样本数据
<cfscript>
q = queryNew("id,name,category","Integer,Varchar,Varchar",
[{id=1, name="One", category="Cat"},{id=2, name="Two", category="Dog"}]
);
writedump(q);
</cfscript>
有关实时版本,请参见:是否
参数.q.getMeta().getColumnLabels()
返回已排序的列表?但是,saysgetColumnlist
据说/应该按原始顺序返回列名,而不是按字母顺序排序:sing Lucee,这是我的
-但是有一个错误,说no对象中不存在函数[getMeta],只有以下函数可用:[addColumn,addRow,columnArray,columnCount,columnData,columnExists,columnList,currentRow,deleteColumn,deleteRow,….t]。
我正在更新我的函数帖子中的代码,我已经用我现在作为函数使用的更新代码更新了我的问题是的,使用LuceeEfwiw,文档化的getMetaData(queryObj)函数应该在这两种情况下都能工作。
</cfscript>
result.rows = [];
columnLabels = q.getMeta().getColumnLabels();
writedump(columnLabels);
</cfscript>
<cfloop query="q">
<cfset rowStruct = [:]><!--- Tada an ordered struct --->
<cfloop array="#columnLabels#" item="col">
<cfset rowStruct[col] = q["#col#"]>
</cfloop>
<cfset arrayappend(result.rows, rowStruct)>
</cfloop>
<cfdump var="#result.rows#">
<cfscript>
for (row in q) {
rowStruct = [:];
for (col in columnLabels) {
rowStruct[col] = q["#col#"];
}
result.rows.append(rowStruct);
}
</cfscript>