2012-02-16 24 views
1

好吧!我有一个flashVar变量进入Flash,它的URL已经编码,但我已经解码了它。我的问题是我想要将一组变量推入数组中。URLEncode变量从字符串解析到数组as3

假设变量是

“& text0 =输入文字...... & size0 = 18 & FONT0 =宋体& COLOR0 = 0 & rotation0 = 0 & Y0 = 360 & X0 = 640 &的text1 =输入 文本... &尺寸1 = 18 & font1 = Arial字体& COLOR1 = 0 & rotation1 = 0 & Y1 = 360 & X1 = 640"

等等...

我想是的变量去到一个数组一样

myArray[0].text = Enter Text... 
myArray[0].size = 18] 
myArray[0].font = Arial 
myArray[0].color = 0 
myArray[0].rotation = 0 
myArray[0].y = 360 
myArray[0].x = 640 
myArray[1].text = ........... 
............................. 
............................. 
myArray[n].text = ........... 

我想一定是有办法做到这一点。很可能我正在考虑正则表达式,但在正则表达式方面我很不好。请一定帮助非常非常感谢

谢谢!

回答

3

您不必到您的查询字符串解码,只需使用URLVariables对象 - 它会做所有的解码你。然后遍历它的动态属性来创建你的数组。使用正则表达式在你的变量键结束查找索引号:

function parseURLVariables(query:String) : Array { 
    var vars:URLVariables = new URLVariables (query); 
    var arr:Array = []; 
    for (var key : String in vars) { 
     var splitIndex : int = key.search(/[0-9]+$/); 
     var name:String = key.substr (0,splitIndex); 
     var indexNumber:int = parseInt (key.substr(splitIndex)); 
     arr[indexNumber] ||= {}; 
     arr[indexNumber][name] = vars[key]; 
    } 
    return arr; 
} 

由于您的查询字符串以&号开始,你可能需要使用parseURLVariables (myString.substr(1)),否则URLVariables对象将抛出一个错误,抱怨查询字符串无效(必须进行url编码,并以变量键开头)。

+0

谢谢@weltraumpirat,它像一个魅力。 – 2012-02-16 18:00:10

0

你可以使用字符串拆分方法来这样的事情;

var astrKeyValue: Array = url.Split("&"); 
这样

astrKeyValue每个值是字符串键值(例如font1=Arial) 后可能比你的每个项目与“=”分开,会得到对键和值(键 - font1和价值 - 宋体) 所以这段代码,也许会为你工作

var str = "text0=Enter Text...&size0=18&font0=Arial&color0=0&rotation0=0&y0=360&x0=640&text1=Enter Text...&size1=18&font1=Arial&color1=0&rotation1=0&y1=360&x1=640" 
var a : Array = str.split("&"); 
var newArr: Array = new Array() 
for each (var str1 in a) 
{ 
    var t: Array = str1.split("="); 
    newArr[ t[0] ] = t[1]; 
} 

trace(newArr.text0) // -> Enter Text... 
+0

你应该看看URLVariables类 - 它可能一段时间节省你的未来。另外:OP想要将这些值解析为一个索引数组 - “text0”是不够的。你应该更仔细地阅读这些问题。 – weltraumpirat 2012-02-16 09:24:03

0

下面是我为你解决,

//your string data should be like this, there should be a seperate seperator (i've used pipe sign |) for each element which will be converted to an object and then pushed to the array 
var strData:String = "text=Enter Text...&size=18&font=Arial&color=0&rotation=0&y=360&x=640|text=Enter Text...&size=18&font=Arial&color=0&rotation=0&y=360&x=640"; 

var myArray:Array = new Array(); 
var _tmpArr:Array = strData.split("|"); 

//populating the array 
for(var i:int=0;i<_tmpArr.length;i++) 
{ 
    myArray.push(strToObj(_tmpArr[i])); 
} 
trace(myArray.length); 

// coverts chunk of string to object with all key and value in it 
function strToObj(str:String):Object 
{ 
    var obj:Object = new Object(); 
    var tmpArr:Array = str.split('&'); 

    for (var i:int = 0; i < tmpArr.length; i++) 
    { 
     var _arr:Array = String(tmpArr[i]).split('='); 
     var key:String = String(_arr[0]); 
     var val:String = String(_arr[1]); 
     obj[key] = val; 
     trace(key+" = "+val); 
    } 
    trace("----"); 
    return obj; 
} 
+0

伙计,我不允许使用“|”分隔符。 – 2012-02-16 17:19:55

+0

这是这个例子中最大的问题。要将字符串拆分为数组而没有分隔符来分割它,@ weltraumpirat的函数可以工作。感谢您花时间提供帮助。 – 2012-02-16 18:05:41