Flash хранит строки как ключи в массиве - PullRequest
0 голосов
/ 08 октября 2009

в php я мог бы сделать:

$prices['ford']['mondeo']['2005'] = 4500;
$prices['ford']['mondeo']['2006'] = 5500;
$prices['ford']['mondeo']['2007'] = 7000;

и может сделать:

echo sizeof($prices['ford']); // output 1
echo sizeof($prices['ford']['mondeo']) //output 3

как мне добиться этого во Flash. Flash не любит STRINGS как клавиши ARRAY, правда?

Ответы [ 3 ]

2 голосов
/ 08 октября 2009

Чтобы иметь функциональность, подобную ассоциативному массиву, вы можете использовать Object;

var prices:Object = new Object();
prices.ford = new Object();
prices.ford.mondeo = new Object();
prices.ford.mondeo['2005'] = 4500;
prices.ford.mondeo['2006'] = 5500;
prices.ford.mondeo['2007'] = 7000;

или просто

var prices:Object = {
  ford: {
    mondeo: {
      2005: 4500,
      2006: 5500,
      2007: 7000
    }
  }
};

Actionscript не имеет встроенной функции, похожей на sizeof в php, но вы можете легко написать одну из своих:

function sizeof(o:Object):Number {
    var n:Number = 0;
    for (var item in o)
        n++;
    return n;
}

И просто используйте его как в php:

trace(sizeof(prices['ford'])); // traces 1
trace(sizeof(prices['ford']['mondeo'])); // traces3
1 голос
/ 08 октября 2009
var array:Array = [];
array['name'] = "the name";
array['something'] = "something else";
trace(array.length);

Он отслеживает 0. Так что да, flash не очень любит строки как ключи массива, хотя это разрешено. Array - это динамический класс (например, Object), где вы можете добавлять свойства к отдельным объектам по своему усмотрению. array['name'] = "myname" совпадает с array.name = "myname".

Тем не менее, вы можете присвоить массив array['name'] и прочитать его длину.

var array:Array = [];
array['name'] = new Array();
array.name.push(1, 2, 3);
trace(array.length);//traces 0
trace(array.name.length);//traces 3
1 голос
/ 08 октября 2009

Массивы индексируются целыми числами во Flash, если вы хотите индексировать строку, используйте вместо нее объект.

...