PHP итерации от глубины к внешнему в ассоциативном массиве или XML - PullRequest
0 голосов
/ 07 июня 2019

Мне нужно перейти от самого глубокого уровня к внешнему в XML или массиве.

Причина в том, что я пытаюсь создать мыльный ответ из XML. Проблема в том, что при создании объекта мыла мне нужно идти от более глубокого рычага к внешнему, и я не могу найти способ сделать это.

Итак, при построении отклика мыла с помощью soapvar, порядок должен быть vars, затем контейнер объекта, затем родительский контейнер и т. Д.

Если есть более простой способ сделать это с помощью массива, у меня уже есть функция, которая преобразует мой xml в массив, где ключи являются именами узлов.

У меня есть эта функция для создания объекта мыла, но он поддерживает только 2 уровня (контейнер и его дочерние элементы), и то, что я сейчас делаю, выполняет цикл по xml и вызывает эту функцию для каждого уровня, и если мой xml идет глубже у меня внутри статически новый цикл.

public static function soapObjEncode($data, $soapContainer, $ns) {
    $i = 0;
    $dataStruct = new ArrayObject;
    foreach ($data as $lstOfData) {
        $dataInStruct = new ArrayObject;
        $lstOfData = parser::xml2array($lstOfData);
        foreach ($lstOfData as $key => $val) {
            if (is_array($val)) {
                self::soapObjEncode($val, $key, $ns);
            } else {
                $dataInStruct[] = new SoapVar($val, XSD_STRING, null, null, $key, $ns);
            }
        }
        $dataStruct[$i] = new SoapVar($dataInStruct, SOAP_ENC_OBJECT, null, null, $soapContainer, $ns);
        $i++;
    }
    return $dataStruct;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...