2010-05-20 96 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; 
}