如何获得特定位置的数组总和?

How to get sum of array for specific position?

我有一个数组:

<cfset fullarray = listtoArray (listofcollumnvalues)>

它有例如:

fullarray[1]=20
fullarray[2]=11
fullarray[3]=4
fullarray[4]=12.2
etc.

我想加上数字下方 X 位置的总和: 例如,如果我想要第二个元素及以下元素的总和

2 + 3 + 4= 27.2

ColdFusion 10 引入了ArraySlice 功能。当你给它一个数组、一个起始位置和一个可选的长度时,它 return 就是一个数组。所以 ArraySlice(myArray,3,4) 会 return 一个 "sub-array" 的元素从位置 3 开始并包含 4 个元素。

根据你的例子:

mySum = ArraySum(ArraySlice(fullarray,2))

如果您使用的是 CF 9 或更低版本,则可以使用 UDF。在 CFLib.org 有

警告! arraySlice 使用 "start" 和 "end" 元素参数,而 arraySlice2 使用 "start" 和"length" 个参数,例如内置的 CF10 函数。

以下内容适用于旧版本。

<cfscript>
function listSum(listStr)
{
  var delim = ",";
  if(ArrayLen(Arguments) GTE 2) 
    delim = Arguments[2];
  return ArraySum(ListToArray(listStr, delim));
}
</cfscript>

只需将其调用为#listSum(MyListOrArray)#

这是格式化的评论。您将数组定义为:

<cfset fullarray = listtoArray (listofcollumnvalues)>

变量 listofcollumnvalues 看起来可能代表查询对象的结果。如果是这样的话,您可能做的工作比必要的多,因为查询的每一列实际上都是一个数组。例如考虑这个查询:

<cfquery name = "queryName">
select field1, numericalField
from etc
</cfquery>

你实际上可以这样做:

numericalFieldSum = ArraySum(queryName['numericalField'];

这不是您想要的,但它说明您可能不需要初始命令。

继续假设您是从查询开始的,查询中的查询可能会给您想要的结果。

<cfquery name = "mySum" dbtype = "query">
select sum(numericalField) theSumIWant
from queryName
where your conditions are met
</cfquery>

当然,如果 listofcollumnvalues 不是来自查询,你应该声明这个答案是无用的废话并相应地投反对票。