Я нашел все ответы, чтобы использовать слишком много кода. Вот простой способ сделать это:
function to_xml(SimpleXMLElement $object, array $data)
{
foreach ($data as $key => $value) {
if (is_array($value)) {
$new_object = $object->addChild($key);
to_xml($new_object, $value);
} else {
// if the key is an integer, it needs text with it to actually work.
if ($key == (int) $key) {
$key = "key_$key";
}
$object->addChild($key, $value);
}
}
}
Тогда просто передать массив в функцию, которая использует рекурсию, поэтому она будет обрабатывать многомерный массив:
$xml = new SimpleXMLElement('<rootTag/>');
to_xml($xml, $my_array);
Теперь $ xml содержит красивый XML-объект, основанный на вашем массиве, точно так, как вы его написали.
print $xml->asXML();
В случае, когда диагональ не пересекает ребра, дополнительно проверьте, находится ли середина этой диагонали внутри многоугольника
(например, используя известный метод пересечения ребер )