Arrays Coldfusion将数组一分为二

Arrays 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) />

我是否可以将一个数组拆分为两个独立的数组,原始数组中的每个元素都用“:”分隔?“:”前面的文本转到数组1,“:”后面的文本转到数组2

<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, ",")>