2010-05-20 1 views
0

Я имею это трудно понять, что нужно сделать, я использую URLVariables для отправки/ПОЛУЧИТЕ значения между вспышкой и PHPс использованием вложенных массивов с помощью PHP http_build_query() и получать их во флэш-AS3

проблема есть, я не в состоянии получить доступ к вложенным массивам (массив внутри массива) со вспышкой

Вот пример:

$ dgresult = Array ("всего" => $ результатов); echo http_build_query ($ dgresult, "flf_");

Вспышка, все, что мне нужно сделать, это использовать: переменные var: URLVariables = new URLVariables (e.target.data);

тогда я могу получить к нему доступ: variables.total

проблема теперь, когда я вложенные массивы:

$ dgresult = Array ("всего" => $ результатов); array_push ($ dgresult, $ another_array); http_build_query ($ dgresult, "flf_");

я все еще может получить доступ к variables.total

но что обо всем, что имеет flf_? как это возможно?

ответ

1

вы должны попытаться просто использовать установленные форматы для сложных данных, например JSON. Для PHP см. here и для AS3 см. here. Или готовые решения, такие как AMFPHP.

Greetz
back2dos

+0

Право, я использовал функцию JSON для повышения выхода к допустимый уровень во Flash. Благодарю. – Mahmoud

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; 
}