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

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

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

Вот пример:

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

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

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

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

$ dgresult = array ("total" => $ results); array_push ($ dgresult, $ another_array); http_build_query ($ dgresult, "ФНЧ _");

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

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

Ответы [ 2 ]

1 голос
/ 20 мая 2010

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

Greetz
back2dos

0 голосов
/ 02 апреля 2014

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

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