struct - 嵌套结构未正确排序
问题描述
我正在循环查询,构建结构数组
<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>
让我们看看样本数据。请注意,这些列与预期不同。
现在让我们准备好我们的 columnLabels。请注意,我们正在创建一个数组。
</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
<cfscript>
for (row in q) {
rowStruct = [:];
for (col in columnLabels) {
rowStruct[col] = q["#col#"];
}
result.rows.append(rowStruct);
}
</cfscript>
有关实时版本,请参阅:CFFiddle.com
推荐阅读
- java - 如何使用 Java 以类似于 SQL 中的左外连接的方式连接两个数据集
- java - 基于多个标签从 SQLite 数据库中选择多个数据
- javascript - 地理位置 HTML5 的问题
- node.js - Twilio - 等待所有参与者进入房间并开始录制(小组房间)
- javascript - 在对象创建时保存多对多字段 - Django DRF
- python - 每次导入时都会发出 Tensorflow 警告 - 'cudart64_101.dll not found'。有没有办法摆脱这个警告?
- excel - 过滤唯一值并从 A 到 Z Excel VBA 排序
- symfony - Easyadmin manyToMany 关系未在基础中保存数据
- ios - Apple 的 iOS14 ATT 提示可以实现什么选择率?
- html - 我的图像只有在我将其转移到手机显示屏时才会缩小