gpt4 book ai didi

php - 将 PHP foreach 循环转换为 ColdFusion

转载 作者:行者123 更新时间:2023-12-02 06:35:02 24 4
gpt4 key购买 nike

我有使用 foreach 循环循环并创建查询的 PHP 代码。我正在尝试将其转换为 ColdFusion,但我迷路了。有人可以展示如何做到这一点吗?

if ($deps) {
$num = count($deps);
$i = 0;
$addon = " AND (";
foreach ($deps as $dep) {
$addon .= " DEPARTMENT_ID='{$dep['dep']}'".($num != ++$i ? ' OR': '');
}
$addon .= ")";
} else {
// Has been assigned no departments, so they can't see any tickets
$addon = " AND (DEPARTMENT_ID='-1')";
}

最佳答案

这是将 PHP 直接翻译成 CFML,即:根据需要进行尽可能少的更改以使其编译和运行:

<cfscript>
if (isDefined('$deps')) {
$num = ArrayLen($deps);
$i = 0;
$addon = " AND (";
for ($dep in $deps) {
$addon &= " DEPARTMENT_ID='#$dep['dep']#'"&($num NEQ ++$i ? ' OR': '');
}
$addon &= ")";
} else {
// Has been assigned no departments, so they can't see any tickets
$addon = " AND (DEPARTMENT_ID='-1')";
}
</cfscript>

这是显示更改内容的差异屏幕截图:

diff of php and cfml code

变化是:

  • 需要isDefined检查非空值。
  • ArrayLen而不是 count获取数组的大小。
  • foreach ( Y as X ) 转换为 for ( X in Y )
  • 使用 &&= 进行连接,而不是 ..=
  • 当括号符号 var 位于字符串内时,PHP 使用 {braces} - 对于单个变量,它可能直接是 $varname 并且将被计算。在 CFML 中,您使用 #hashes# 将变量的值放入字符串中。

请注意,CF 允许您在脚本中使用 !=,但 NEQ 必须在基于标签的代码 (cfif/cfset) 中使用。

另请注意,虽然 PHP 要求变量以 $ 符号开头,但 CFML 不关心任何一种方式,因此不需要严格删除它们(即使它们是丑陋的噪音) .


下面是用更简单的方式完成的相同概念:

<cfscript>
if ( NOT isDefined('deps') )
deps[1] = {dep=-1};

addon = [];
for ( dep in deps )
ArrayAppend(addon," DEPARTMENT_ID='#dep.dep#'");

addon = " AND (#ArrayToList(addon,' OR')#)";
</cfscript>

下面是一个示例,说明类似的代码如何与 cfqueryparam 一起工作:

<cfscript>
if ( isDefined('deps') )
{
depIds = [];

for ( dep in deps )
ArrayAppend(depIds,dep.dep);
}
else
{
depIds = [-1];
}
</cfscript>
<cfquery>
...
<cfif ArrayLen(depIds) >
AND DEPARTMENT_ID IN (<cfqueryparam list value=#ArrayToList(depIds)# cfsqltype="cf_sql_integer" />)
</cfif>
</cfquery>

(正确的代码当然会使用更好的变量名和适当的范围。)

关于php - 将 PHP foreach 循环转换为 ColdFusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859188/

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