5

我可以将一个数组分成两个单独的数组,原始数组中的每个元素都用“:”分隔吗?“:”之前的文本进入array1,“:”之后的文本进入array2

<cfset tempArr = DeserializeJSON(URL.data) />
<cfset selectList = "" />
    <cfloop array=#tempArr# index="i">
<cfset selectList = listappend(selectList,i) />
</cfloop>

现在这段代码抓住了整个元素,而不是单独的。

编辑

示例字符串为:

名字:鲍勃


first_name 进入 selectList1 Bob 进入 selectList2


宏伟的计划也将有其他领域:

名字:鲍勃

姓氏:什莫

年龄:27

ETC...

编辑:回答

使用代码解决了问题

<!---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>
4

3 回答 3

9

我认为没有看到您的数组示例,您的意思是将数组中的数据分成两个列表?

<cfset selectList1 = listAppend(selectList1, listFirst(i,':')) >
<cfset selectList2 = listAppend(selectList2, listLast(i,':')) >
于 2013-06-05T19:58:46.167 回答
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>
于 2013-06-06T10:55:59.953 回答
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, ",")>

例如 list 是 1,2,3,5,10,11,22,33,44,55,60,61,62,63,64 并且你想将列表分成 2 个块然后 chunksize 将是 8 数组将是结果[1] = "1,2,3,5,10,11,22,33" 结果[2] = "44,55,60,61,62,63,64"

或得到 3 块给你 result[1] = "1,2,3,5,10" result[2] = "11,22,33,44,55" result[3] = "60,61,62 ,63,64"

等等

我发现 Nathan Youngman 的脚本 https://gist.github.com/nathany/742242 它对于将长列表或数组划分为给定大小的块非常有用

于 2017-01-05T11:52:15.790 回答