我可以将数组拆分成两个独立的数组,原始数组中的每个元素用“:”分隔吗? “:”之前的文本转到array1,“:”之后的文本转到array2
<cfset tempArr = DeserializeJSON(URL.data) />
<cfset selectList = "" />
<cfloop array=#tempArr# index="i">
<cfset selectList = listappend(selectList,i) />
</cfloop>
现在这段代码抓住了整个元素,而不是分开。
修改
示例字符串为:
如first_name:鲍勃
first_name进入selectList1 鲍勃进入selectList2
宏伟的计划也会有其他领域:
如first_name:鲍勃
姓氏: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>
答案 0 :(得分:9)
我认为没有看到你的数组示例,你的意思是将数组中的数据拆分为两个列表?
<cfset selectList1 = listAppend(selectList1, listFirst(i,':')) >
<cfset selectList2 = listAppend(selectList2, listLast(i,':')) >
答案 1 :(得分:1)
<cfscript>
variables.lstString = "First_Name:John,Last_Name:McClane";
variables.lstFields = "";
variables.lstValues = "";
for(variables.i=1;variables.i lte listlen(variables.lstString,',');variables.i++){
variables.lstFields &= (listlen(variables.lstFields) gt 0) ? ",#getToken(getToken(variables.lstString,variables.i,','),1,':')#" : getToken(getToken(variables.lstString,variables.i,','),1,':');
variables.lstValues &= (listlen(variables.lstValues) gt 0) ? ",#getToken(getToken(variables.lstString,variables.i,','),2,':')#" : getToken(getToken(variables.lstString,variables.i,','),2,':');
}
writeDump(variables.lstFields);
writeDump(variables.lstValues);
</cfscript>
答案 2 :(得分:0)
为什么不在列表中转换数组
<cfset list = arraytolist(array,",")>
然后使用正则表达式获取第一个元素块,例如数组的一半len或者你喜欢的块大小。
<cfset chunksize = int(listlen(list)/2)+1>
然后在每个元素中使用listpart(chunK)执行一个新数组:
<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, ",")>
e.g。列表是 1,2,3,5,10,11,22,33,44,55,60,61,62,63,64 并且您希望将列表拆分为2个块 然后chunksize将是8 数组将是 结果[1] =&#34; 1,2,3,5,10,11,22,33&#34; 结果[2] =&#34; 44,55,60,61,62,63,64&#34;
或获得3个块 给你 结果[1] =&#34; 1,2,3,5,10&#34; 结果[2] =&#34; 11,22,33,44,55&#34; 结果[3] =&#34; 60,61,62,63,64&#34;
等
我从Nathan Youngman那里找到了剧本 https://gist.github.com/nathany/742242 它非常适用于将长列表或数组分成给定大小的块