Как перебрать двумерный массив?

У меня есть двумерный массив, который выглядит так после того, как я вывел его на экран:

array
1   
array
1   0600
2   
array
1   0
3   
array
1   0600
4   
array
1   0
5   
array
1   0615
6   
array
1   0
7   
array
1   0615
8   
array
1   0
9   
array
1   0630
10  
array
1   0
11  
array
1   0630
12  
array
1   1 

Итак, я хочу перебрать свой массив и вывести значения в следующем порядке:

0600   0
0600   0
0615   0
0615   0
0630   0  
0630   1

Вот код, как я создал свой массив:

<cfloop list="#ListGetAt(dataList,i,",")#" index="z" delimiters="|">
    <cfoutput query="getR" group="theYear">
        <cfset name = myArray.append([z])>
        <cfif Description eq z>
            <cfset count = myArray.append([theCount])>
        <cfelse>
            <cfset count = myArray.append([0])>
        </cfif>
    </cfoutput>
</cfloop>

Итак, как я могу теперь зациклить, чтобы получить эти две записи в порядке, как я показал вам выше? Я пробовал это, но это не сработало:

<cfoutput>
    <cfloop from="1" to="#arraylen(myArray)#" index="i">
        <cfloop array="#myArray#" index="j">
            #i# - #myArray[1][j]#<br/>
        </cfloop>
    </cfloop>
</cfoutput>

Изменить: когда я использовал этот код:

<cfloop array="#myArray#" index="i"> 
    <cfloop array="#myArray#" index="j"> 
        <cfoutput> #myArray[i][j]#<br/> </cfoutput> 
    </cfloop> 
</cfloop> 

Я получил эту ошибку:

The value coldfusion.runtime.Array cannot be converted to a number.

Если кто-то может помочь с этой проблемой, пожалуйста, дайте мне знать.


person espresso_coffee    schedule 23.03.2016    source источник
comment
Я не специалист по холодному синтезу, но разве вы не должны индексировать с помощью [i][j], например. #myArray[i][j] не 1 и j   -  person user5976242    schedule 23.03.2016
comment
Примечание: фраза не сработала: мало что нам говорит. Хотя я подозреваю, что user5976242 прав, попробуйте включить описание фактического результата и, в частности, того, как он отличается от того, что вы ожидали.   -  person Leigh    schedule 23.03.2016
comment
Когда я использовал этот код: ‹cfloop array=#myArray# index=i› ‹cfloop array=#myArray# index=j› ‹cfoutput› #myArray[i][j]#‹br/› ‹/cfoutput› ‹/ cfloop› ‹/cfloop› Я получил эту ошибку: Значение coldfusion.runtime.Array не может быть преобразовано в число.   -  person espresso_coffee    schedule 23.03.2016
comment
@ user3023588 - Хорошо, теперь, когда вы опубликовали сообщение об ошибке, это имеет гораздо больше смысла ;-) Если вы думаете, что сообщение об ошибке точно говорит, в чем проблема ... вы используете цикл array - что означает, что index будет содержать значение одного из элементов массива. Однако выходной код предназначен для использования с циклом «от/к», где значение index представляет собой позицию или число, т. е. 1, 2, 3 и т. д.   -  person Leigh    schedule 23.03.2016


Ответы (2)


Вот как вы получите вывод из своего двумерного массива.

<cfscript>
data = [
    ["0600", 0],
    ["0600", 0],
    ["0615", 0],
    ["0615", 0],
    ["0630", 0],
    ["0630", 1]
];

// script version
for (foo in data) {
    writeOutput(foo[1] & " " & foo[2] & "<br>");
}

</cfscript>

<cfoutput>
tag version...<br>
<cfloop array="#data#" index="foo">
    #foo[1]# #foo[2]#<br>
</cfloop>
</cfoutput>

Пример его использования здесь: http://trycf.com/gist/86b42b56ef7348ec0d44/acf2016?theme=monokai

Однако я не уверен, почему вы используете двумерный массив, когда массив структур (пар ключ-значение) кажется более простым способом сделать это:

Например:

<cfscript>
data = [
    {key:"0600", count:0},
    {key:"0600", count:0},
    {key:"0615", count:0},
    {key:"0615", count:0},
    {key:"0630", count:0},
    {key:"0630", count:1}
];

// script version
for (foo in data) {
    writeoutput(foo.key & " " & foo.count & "<br>");
}

</cfscript>

<cfoutput>
tag version...<br>
<cfloop array="#data#" index="foo">
    #foo.key# #foo.count#<br>
</cfloop>
</cfoutput>
person John Whish    schedule 23.03.2016
comment
Как я могу создать структуру массива со значениями ключа и счетчика из этого кода: .append([z])› ‹cfif Описание eq z› ‹cfset count = myArray.append([theCount])› ‹cfelse› ‹cfset count = myArray.append([0])› ‹/cfif› ‹/cfoutput › ‹/cfloop› ? - person espresso_coffee; 23.03.2016
comment
Что-то вроде <cfset myArray.append({name: z, count: theCount})> - person John Whish; 23.03.2016
comment
Я наткнулся на это в поисках чего-то другого, но мог бы я увидеть, что это блестящий ответ, который можно довольно легко добавить. и +1 за предоставление синтаксиса скрипта. - person HPWD; 18.05.2020

Вы можете исправить свою петлю:

<cfoutput>
<cfloop array="#myArray#" index="firstDimension"> 
    <cfloop array="#firstDimension#" index="secondDimension"> 
        #secondDimension#<br/>
    </cfloop> 
</cfloop>
</cfoutput> 
person Bonanza    schedule 23.03.2016