Это делает то, что я думаю, что вы хотите. В начале есть некоторые тестовые данные, а в конце - дамп массива количеств, чтобы вы могли запустить его без формы.
Я удалил внешний файл. Проверять, содержит ли список что-то, так же дорого, как обходить его, так что просто сделайте это один раз.
Использование содержимого для проверки на «количество_» ненадежно, так как оно выглядит где угодно в строке, а не только в начале. Это может привести к неожиданным ошибкам на трассе.
Вам не нужно инициализировать двумерный массив для количеств, потому что вы собираетесь поместить в него массив.
форма. [I] должна быть формой [i]
Плюс несколько ошибок с arrayAppend.
<!--- test data --->
<cfset form.quantity_1 = 5>
<cfset form.quantity_2 = 1>
<cfset form.quantity_3 = 10>
<cfset form.fieldnames = "quantity_1,quantity_2,quantity_3">
<!--- Check if there are multiple quantities --->
<cfset quantities = ArrayNew(1)>
<cfloop index="i" list="#form.fieldnames#">
<cfif left( i, 9 ) eq "quantity_">
<cfset product = ArrayNew(1)>
<cfset ArrayAppend(product, form[i])>
<cfset ArrayAppend(product, ListGetAt(i, 2, "_"))>
<cfset ArrayAppend(quantities, product)>
</cfif>
</cfloop>
<cfset form.quantity = quantities>
<cfif arrayLen( quantities ) eq 0>
<!--- Make it so if the quantity is blank we set it to 0 so it passes validation --->
<cfset form.quantity = 0>
</cfif>
<!--- check results --->
<cfdump var="#quantities#">