Мне нужно перейти от самого глубокого уровня к внешнему в 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;
}