2012-02-16 45 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