2010-05-20 65 views
0

我有這個很難搞清楚什麼是需要做的, 我使用的URLVariables發送使用嵌套數組由PHP http_build_query()和閃光燈AS3

問題Flash和PHP之間/免費獲贈價值收到他們是,我無法用快速

繼承人訪問嵌套數組(數組內陣列)的示例:

$ dgresult =陣列( 「總」=> $結果); 回聲http_build_query($ dgresult, 「flf_」);我只需要使用: var variables:URLVariables = new URLVariables(e.target.data); variables.total

現在的問題是,當我有嵌套陣列:

然後我可以訪問它

$ dgresult =陣列( 「總」=> $結果); array_push($ dgresult,$ another_array); http_build_query($ dgresult, 「flf_」);

我仍然可以訪問variables.total

但對於任何有flf_? 這怎麼可能?

回答

1

你應該儘量簡單地使用複雜的數據建立的格式,如JSON。對於PHP看到here和AS3看到here。或者現成的解決方案,如AMFPHP

格爾茨
back2dos

+0

正確的,我已經使用JSON的功能,以提高輸出到Flash中可接受的級別。謝謝。 – Mahmoud 2010-05-25 20:53:08

0

,或者你可以只解析對象

var url:String = 'http://localhost/dump.php'; 
var params:Object = { 
    test: 'ok', 
    nested_1: { 
     nested_2: { 
      nested_3: { 
       nested_4: { 
        hello: 'mf', 
        str: '[email protected]#$%^&*()_+' 
       } 
      } 
     } 
    }, 
}; 

var request:URLRequest = new URLRequest(url); 
var variables:URLVariables = new URLVariables(); 

parameters = fixParameters(parameters || {}); 

for (var key:String in parameters) { 
    variables[key] = parameters[key]; 
} 

request.data = variables; 

var loader:URLLoader = new URLLoader(); 
loader.load(request); 

,這裏是fixParameters方法

private function fixParameters(data:Object, parameters:Object = null, prefixes:Array = null):Object { 
    var setPrefix:Array; 
    var prefixKey:String; 

    if (!parameters) { 
     parameters = {}; 
    } 

    if (!prefixes) { 
     prefixes = []; 
    } 

    for (var key:String in data) { 
     setPrefix = prefixes.concat([key]); 

     if (typeof(data[key]) == 'object') { 
      parameters = fixParameters(data[key], parameters, setPrefix); 
     } else { 
      prefixKey = ''; 
      for (var i:Number = 0; i < setPrefix.length; i++) { 
       prefixKey += i == 0 ? setPrefix[i] : '[' + setPrefix[i] + ']'; 
      } 
      parameters[prefixKey] = data[key]; 
     } 
    } 

    return parameters; 
}