Arrays Coldfusion将数组一分为二
我是否可以将一个数组拆分为两个独立的数组,原始数组中的每个元素都用“:”分隔?“:”前面的文本转到数组1,“:”后面的文本转到数组2Arrays Coldfusion将数组一分为二,arrays,coldfusion,cfquery,Arrays,Coldfusion,Cfquery,我是否可以将一个数组拆分为两个独立的数组,原始数组中的每个元素都用“:”分隔?“:”前面的文本转到数组1,“:”后面的文本转到数组2 <cfset tempArr = DeserializeJSON(URL.data) /> <cfset selectList = "" /> <cfloop array=#tempArr# index="i"> <cfset selectList = listappend(selectList,i) />
<cfset tempArr = DeserializeJSON(URL.data) />
<cfset selectList = "" />
<cfloop array=#tempArr# index="i">
<cfset selectList = listappend(selectList,i) />
</cfloop>
现在,这段代码获取整个元素,而不是单独获取
编辑
示例字符串为:
名字:鲍勃
第一个\u名称进入selectList1 Bob进入selectList2
大计划也会有其他类似的领域: 名字:鲍勃 姓氏:Shmo 年龄:27 等等 编辑:回答 通过使用代码解决了这个问题
<!---Variables--->
<cfset temp1 = "" />
<cfset temp2 = "" />
<cfset selectList1 = "" /><!---Holds column names for tables--->
<cfset selectList2 = "" /><!---Holds query parameters for column names. Ie,
values for use in the WHERE clause--->
<cfloop array=#tempArr# index="i"><!---Loop through contents of the array--->
<cfset temp1 = GetToken(i,1,":")/><!---Store the column name--->
<cfset temp2 = GetToken(i,2,":")/><!---Query parameter--->
<cfset selectList1 = listAppend(selectList1, temp1)/><!---Adds to list of column names--->
<cfset selectList2 = listAppend(selectList2, temp2)/><!---Adds to the list of query parameters--->
</cfloop>
我想如果没有看到您的数组示例,您的意思是将数组中的数据拆分为两个列表
<cfset selectList1 = listAppend(selectList1, listFirst(i,':')) >
<cfset selectList2 = listAppend(selectList2, listLast(i,':')) >
variables.lstString=“名字:约翰,姓氏:麦克莱恩”;
variables.lstFields=“”;
variables.lstValues=“”;
对于(variables.i=1;variables.i lte listlen(variables.lstString,,);variables.i++){
variables.lstFields&=(listlen(variables.lstFields)gt 0)?“,#getToken(variables.lstString,variables.i','),1':')#“:getToken(getToken(variables.lstString,variables.i','),1':');
variables.lstValues&=(listlen(variables.lstValues)gt 0)?“,#getToken(variables.lstString,variables.i','),2':')#“:getToken(getToken(variables.lstString,variables.i',”),2':');
}
writeDump(variables.lstFields);
writeDump(variables.lstValues);
为什么不转换列表中的数组
<cfset list = arraytolist(array,",")>
然后使用正则表达式获取第一个元素块,例如数组长度的一半或任何您喜欢的块大小
<cfset chunksize = int(listlen(list)/2)+1>
然后在每个元素中使用listpart(块)创建一个新数组:
<cfscript>
function ListSplit(list, chunkysize, delim)
{
var result = ArrayNew(1);
var re = "";
var start = 1;
while(1) {
re = REFind("((?:[^#delim#]+#delim#){1,#chunkysize#})", list & delim, start, "true");
if( re.len[1] eq 0 ) break;
ArrayAppend(result, Mid(list,re.pos[1],re.len[1]-len(delim)));
start = re.pos[1] + re.len[1];
if(start gte len(list)) break;
}
return result;
}
</cfscript>
<cfset newarray = ListSplit(list, chunksize, ",")>
函数ListSplit(列表、chunkysize、delim)
{
var结果=ArrayNew(1);
var re=“”;
var start=1;
而(1){
re=REFind(((?:[^#delim#]+#delim#){1,#chunkysize#}),list&delim,start,“true”);
如果(关于len[1]eq 0)中断;
ArrayAppend(结果,Mid(列表,re.pos[1],re.len[1]-len(delim));
开始=重新位置[1]+重新长度[1];
如果(启动gte透镜(列表))中断;
}
返回结果;
}
e、 g.名单如下:
1,2,3,5,10,11,22,33,44,55,60,61,62,63,64
你想把列表分成两块
那么chunksize将是8
阵列将被删除
结果[1]=“1,2,3,5,10,11,22,33”
结果[2]=“44,55,60,61,62,63,64”
或者用你的手拿3块
给你
结果[1]=“1,2,3,5,10”
结果[2]=“11,22,33,44,55”
结果[3]=“60,61,62,63,64”
等等
我从Nathan Youngman那里找到了剧本
它对于将长列表或数组划分为给定大小的块非常有用。不太好,我正在查找第一个元素,在“:”之前和之后,而不是第一个/最后一个元素fyi:另一个选项是使用
getToken
。它比listFirst/Last
的优点是不需要验证长度<如果给定的列表元素不存在,code>getToken将返回一个空字符串。在这种情况下,如果它少于两个元素,@JimRilye-getToken(value,position,“:”)
可能会这样做。但请包含字符串的示例和所需的结果。@JimRilye-很抱歉,我看不到区别;-)如果单个数组元素i
始终包含两个由单个冒号分隔的字符串,即foo:bar
,那么williambq的原始代码应该可以正常工作。(就我个人而言,我更喜欢getToken
,但从技术上讲,这两种方法都是有效的)。CF通常以0开始迭代,不,大多数东西都是基于1的。
<cfscript>
function ListSplit(list, chunkysize, delim)
{
var result = ArrayNew(1);
var re = "";
var start = 1;
while(1) {
re = REFind("((?:[^#delim#]+#delim#){1,#chunkysize#})", list & delim, start, "true");
if( re.len[1] eq 0 ) break;
ArrayAppend(result, Mid(list,re.pos[1],re.len[1]-len(delim)));
start = re.pos[1] + re.len[1];
if(start gte len(list)) break;
}
return result;
}
</cfscript>
<cfset newarray = ListSplit(list, chunksize, ",")>