2017-01-13 8 views
3

В PHP ли массив или структура (ассоциативный массив), вы просто сделать это:Foreach() array.each() в coldfusion ... назад для массива и структуры? Что дает?

foreach ($ra as $key=>$value){} 

и для массива вы получаете 1=>first value, 2=>second value, etc. Для «структуры» вы получаете firstkey=>first value, secondkey=>second value, etc.

В ColdFusion:

ra = {'key1'='val1','key2'='val2'};  
ra.each(function(value, key) { 
    writeOutput("#key# => #value#<br />"); 
}); 

ra = ['one','two'];  
ra.each(function(value, key) { 
    writeOutput("#key# => #value#<br />"); 
}); 

и вы получите:

val1 => key1 
val2 => key2  
1 => one 
2 => two 

Я получаю значение (знач1), где я ожидал ключ (key1) Итак, что я делаю неправильно? Я настраиваю свою структуру назад? Действительно ли coldfusion делает each() напротив, для массива/структуры?

Ответ, через @Leigh: Да, они возвращаются назад. Вот как это делается:

if(isStruct(ra)){ 
    ra.each(function(key, value) { 
     writeOutput("#key# => #value#<br />"); 
    });  
}else{//aray 
    arrayeach(ra, function(value, key) { 
     writeOutput("#key# => #value#<br />"); 
    });  
} 
+0

Итерация через структуры CF не имеет * гарантированного * заказа. Хотя предположительно это изменилось (несколько) в 2016 году. См. [StructNew («упорядочено»)] (https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-s/structnew.html) – Leigh

+0

Я вижу, но мой вопрос заключается не в заказе, а в вопросе функции call(). –

+0

Duh! Извините, совершенно неправильно. – Leigh

ответ

0

Функции обратного вызова удобно обратные друг от друга. Вот как вы можете с этим справиться:

if(isStruct(ra)){ 
    ra.each(function(key, value) { 
     writeOutput("#key# => #value#<br />"); 
    });  
}else{//aray 
    arrayeach(ra, function(value, key) { 
     writeOutput("#key# => #value#<br />"); 
    });  
}