gpt4 book ai didi

coldfusion - 动态循环遍历 URL 参数

转载 作者:行者123 更新时间:2023-12-05 00:22:45 28 4
gpt4 key购买 nike

我正在尝试编写一些代码来循环遍历以单词“layer”开头的 URL 参数,然后是 1,2,3 等。例如:

http://example.cfm?numLayers=2&layer1=somevalue,123&layer2=someothervalue,456

URL 中的层数每次都会不同。

这是我的代码:
<cfif isDefined("url.numLayers") AND url.numLayers gt 0>
<cfset session.structLayers = structNew() />
<cfloop index="index" from="1" to="#url.numCustom#">
<cfset layerElement = evaluate(url.layer#index#) /><!--- This is where I'm having trouble --->
<cfset arrLayerElement = listToArray(layerElement)>
<structInsert(session.structLayers, arrLayerElement[1], arrLayerElement[2])]>
</cfloop>
</cfif>

我在上面标记的行上收到“无效的 CFML 构造错误”。我这样做不对。

最佳答案

您可以尝试以下操作。首先,使用structKeyExists()而不是 isDefined() .你会看到更好的性能:

<cfset numLayers = 0 />
<cfif structKeyExists(url, "numLayers")>
<cfset numLayers = val(url.numLayers) />
</cfif>

此外,您不需要使用 evaluate()没有了。
<cfset session.structLayers = {} /> <!--- instead of "structNew()" --->
<cfloop from="1" to="#numLayers#" index="ii">
<cfif structKeyExists(url, "layer#ii#")> <!--- instead of evaluate --->
<cfset arrLayerElement = listToArray(url["layer#ii#"]) />
<cfset structInsert(session.structLayers, arrLayerElement[1], arrLayerElement[2]) />
</cfif>
</cfloop>

你也可以做这样的事情:
<cfloop collection="#url#" item="mylayer">
<cfif REFindNoCase("^layer\d+$", mylayer) AND listLen(url.mylayer) EQ 2>
<cfset structInsert(session.structLayers, listFirst(url.mylayer), listLast(url.mylayer) />
</cfif>
</cfloop>

我在编写这段代码时意识到对 listToArray() 的调用不是真的需要。如果您打算在循环外再次使用该数组,那么我会全力以赴,但是由于您使用了一次,然后再也不会引用它,因此可能不值得麻烦。

关于coldfusion - 动态循环遍历 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436962/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com