我很好奇为什么会这样。我现在已经遇到了两次,经过大量的谷歌搜索/so'ing,我还没有找到任何我真正理解的理由。它的要点:
查询 1:selectContent(6 条记录;没有空格/空值等)
查询 2:selectPricing(5 条记录;无空白/空值等)
输出:
<cfloop query="selectContent">
<section>
#selectContent.h2#
<cfif selectContent.id eq 3>
<cfloop query="selectPricing" group="groupCol">
<table class="pricing">
<thead>
<tr>
<th>#description#</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<cfloop>
<tr>
<td>#selectPricing.description#</td>
<td>#selectPricing.price#</td>
</tr>
</cfloop>
</tbody>
</table>
</cfloop>
</cfif>
#selectContent.content#
</section>
</cfloop>
这将给出以下错误:数组索引超出范围:5
仅当第二个查询的记录少于第一个时,才会出现该错误。本质上,感觉就像第一个 cfloop 接管了第二个的循环迭代,这会导致问题,但前提是您在那里有第三个分组的 cfloop。整个内部 cfloop 运行,就像在源代码中一样。
我想出了两种方法来解决这个问题:
- 使用 cfoutput/group 执行此操作,但这相对难看,因为这意味着要关闭页面其他部分的大量 cfoutput。
- 如果 currentRow 与记录计数匹配,则在第三个 cfloop 上粘贴一个 cfbreak。
所以,两个问题:
为什么会发生这种情况?
我是否应该在这里使用完全不同的方法(谷歌搜索/搜索并没有找到其他有此问题的人的事实似乎暗示着......)?
编辑 我已根据 Adam Cameron 在下面的反馈将其归档为 Coldfusion 错误。错误 #3820049