2013-06-05 4 views
5

Можно ли разделить массив на два разделенных друг на друга с каждым элементом исходного массива, разделенным символом «:»? Текст перед «:» идет в array1, текст после «:» идет к массив2Coldfusion разбивает массив на два

<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: Боб

last_name: Шмо

Возраст: 27

и т.д ...

EDIT: ответ

Проблема была решена путем использования кода

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

ответ

9

Я думаю, что, не увидев пример вашего массива, вы имеете в виду разбиение данных в массиве на два списка?

<cfset selectList1 = listAppend(selectList1, listFirst(i,':')) > 
<cfset selectList2 = listAppend(selectList2, listLast(i,':')) > 
+2

+1 Я просто печатая аналогичный ответ. Ты подтолкнул меня на это. –

+0

Не совсем, я ищу первый элемент, как до, так и после ":", а не первый/последний элемент – Zac

+2

FYI: Еще один вариант - использование 'getToken'. Его преимущество перед 'listFirst/Last' - вам не нужно проверять длину. 'getToken' возвращает пустую строку, если данный элемент списка не существует. В этом случае, если он имеет менее двух элементов. – Leigh

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

например, Список 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 порции с дает результат [1] = "1,2,3,5,10" результат [2] = "11,22,33,44,55" результат [3] = "60,61,62,63,64"

и т. Д.

Я нашел сценарий от Nathan Youngman https://gist.github.com/nathany/742242 его очень полезно для разделения длинных списков или массив на куски заданного размера

Смежные вопросы