использование вложенных массивов с помощью php http_build_query () и получение их во флэш-памяти AS3

Мне сложно понять, что нужно делать, я использую URLVariables для отправки / получения значений между flash и PHP

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

вот пример:

$ dgresult = array ("total" => $ results); echo http_build_query ($ dgresult, "flf_");

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

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

проблема теперь в том, что у меня есть вложенные массивы:

$ dgresult = array ("total" => $ results); array_push ($ dgresult, $ another_array); http_build_query ($ dgresult, "flf_");

я все еще могу получить доступ к переменным. итого

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


person Mahmoud    schedule 20.05.2010    source источник


Ответы (2)


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

greetz
back2dos

person back2dos    schedule 20.05.2010
comment
Правильно, я использовал функции JSON для улучшения вывода во Flash до приемлемого уровня. Спасибо. - person Mahmoud; 26.05.2010

или вы можете просто проанализировать объект

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

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;
}
person Alexander Gavazov    schedule 02.04.2014