6

在 ColdFusion 中转换值数组的最佳方法是什么

[ Fed Jones, John Smith, George King, Wilma Abby] 

以及最后一个逗号是 or 的列表

Fed Jones, John Smith, George King or Wilma Abby

我认为 REReplace 可能有效,但还没有找到正确的表达方式。

4

3 回答 3

13

如果您有一个数组,则将最后一个元素与 ArrayToList 组合是最简单的方法(根据亨利的回答)。

如果你把它作为一个字符串,使用 rereplace 是一个有效的方法,并且会像这样工作:

<cfset Names = rereplace( Names , ',(?=[^,]+$)' , ' or ' ) />

表示匹配一个逗号,然后检查(不匹配)直到字符串末尾没有更多的逗号(这当然只适用于最后一个逗号,因此它将被替换)。

于 2012-12-12T01:31:06.887 回答
5

在转换为列表之前,首先在数组级别进行操作会更容易。

names = ["Fed Jones", "John Smith", "George King", "Wilma Abby"];
lastIndex = arrayLen(names);
last = names[lastIndex];
arrayDeleteAt(names, lastIndex);
result = arrayToList(names, ", ") & " or " & last;  
// result == "Fed Jones, John Smith, George King or Wilma Abby"
于 2012-12-12T00:22:57.823 回答
3

另一种选择是使用 listLast 和结果字符串的 JAVA lastIndexOf()方法来处理列表/字符串。

<cfscript>
  names = ["Fed Jones", "John Smith", "George King", "Wilma Abby"];
  result = arraytoList(names,', ');
  last = listLast(result);
  result = listLen(result) gt 1 ? mid(result, 1, result.lastIndexOf(',')) & ' or' & last : result;
</cfscript>
<cfoutput>#result#</cfoutput>

结果:

美联储琼斯、约翰史密斯、乔治金或威尔玛艾比

于 2012-12-12T00:54:49.007 回答