@ 2013-08-28T14:42:10Z <?php
$context = [
'mes' => [
'attributes' => [
't' => 'AddEvent',
'id' => 'test_id',
],
'ev' => [
'attributes' => [
'evt' => 'packet20130828ki3si0',
'src' => 'NVV',
'st' => 'test',
'start' => '12423511247',
'stop' => '12423991978',
'addrtype' => 'MB',
'clntID' => '+380957700418',
'lg' => '',
'bank' => '',
'lang' => '',
'prior' => '',
'brnm' => '',
'extref' => '',
'intref' => '',
'extaddrtype' => '',
'extaddrid' => '',
'recall' => '',
],
'attr' => [
[
'attributes' => [
'code' => '1',
'val' => '11',
],
],
[
'attributes' => [
'code' => '2',
'val' => '12',
],
],
],
'hist' => [
[
'attributes' => [
'st' => '',
'ch' => '',
'lg' => '',
'con' => '',
'com' => '',
'addrtype' => '',
'addrid' => '',
'dt' => '',
'contactId' => '',
],
],
],
],
],
];
class Conv
{
protected $res;
protected $context;
protected $lastKey = 'item';
public function __construct(array $context)
{
if (count($context) != 1) {
throw new Exception('Must be only one root element', 500);
}
$this->context = $context;
$this->init(key($this->context));
}
public function conv() {
return $this->a2x(current($this->context), $this->res)->asXML();
}
protected function init($root) {
$this->res = new SimpleXMLElement("<{$root}/>");
}
protected function addAttribs(array $attribs, SimpleXMLElement $node)
{
if (count($attribs)) {
foreach ($attribs as $attrKey => $attrVal) {
$node->addAttribute($attrKey, $attrVal);
}
}
return $node;
}
protected function tryToAddAttribs(array &$inner, SimpleXMLElement $node)
{
if (isset($inner['attributes'])) {
$this->addAttribs($inner['attributes'], $node);
unset($inner['attributes']);
}
return $node;
}
protected function addEnum(array $items, SimpleXMLElement $node, $caption)
{
if (count($items)) {
foreach ($items as $item) {
$subNode = $node->addChild($caption);
$this->tryToAddAttribs(&$inner, $subNode);
}
}
}
protected function a2x(array $inner, SimpleXMLElement $node)
{
$this->tryToAddAttribs(&$inner, $node);
if (count($inner)) {
foreach ($inner as $key => $value) {
if ($this->isEnumeration($value)) {
foreach ($inner as $item) {
$this->addEnum($item, $node, $this->lastKey);
}
} else {
$this->lastKey = $key;
$subNode = $node->addChild($key);
$this->a2x($value, $subNode);
}
}
}
return $this->res;
}
protected function isEnumeration(array $items)
{
$keys = array_keys($items);
foreach ($keys as $key) {
if (!is_numeric($key)) {
return false;
}
}
return true;
}
}
$a2x = new Conv($context);
var_dump($a2x->conv()); //->asXML();
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 5.5.3 0.003 0.037 17.17 5.5.2 0.007 0.037 17.26 5.5.1 0.003 0.037 17.18 5.5.0 0.007 0.060 17.22 5.4.19 0.003 0.037 19.25 5.4.18 0.003 0.037 18.89 5.4.17 0.003 0.063 18.88 5.4.16 0.007 0.057 19.08 5.4.15 0.013 0.057 19.01 5.4.14 0.003 0.040 16.30 5.4.13 0.003 0.033 16.39 5.4.12 0.000 0.037 16.43 5.4.11 0.000 0.040 16.41 5.4.10 0.007 0.033 16.46 5.4.9 0.000 0.037 16.42 5.4.8 0.000 0.040 16.41 5.4.7 0.007 0.037 16.41 5.4.6 0.010 0.037 16.43 5.4.5 0.000 0.037 16.39 5.4.4 0.007 0.030 16.34 5.4.3 0.003 0.033 16.46 5.4.2 0.000 0.040 16.38 5.4.1 0.000 0.040 16.27 5.4.0 0.007 0.030 15.88 5.3.27 0.007 0.040 14.60 5.3.26 0.010 0.033 14.52 5.3.25 0.013 0.030 14.52 5.3.24 0.000 0.040 14.43 5.3.23 0.000 0.040 14.53 5.3.22 0.000 0.040 14.50 5.3.21 0.007 0.037 14.52 5.3.20 0.000 0.040 14.64 5.3.19 0.000 0.040 14.56 5.3.18 0.010 0.033 14.53 5.3.17 0.003 0.037 14.50 5.3.16 0.003 0.037 14.48 5.3.15 0.000 0.040 14.52 5.3.14 0.000 0.040 14.50 5.3.13 0.000 0.040 14.36 5.3.12 0.003 0.037 14.47 5.3.11 0.010 0.033 14.37 5.3.10 0.010 0.030 13.98 5.3.9 0.003 0.053 13.99 5.3.8 0.003 0.040 13.98 5.3.7 0.003 0.043 13.98 5.3.6 0.000 0.063 13.97 5.3.5 0.010 0.067 13.70 5.3.4 0.003 0.057 13.88 5.3.3 0.003 0.057 13.68 5.3.2 0.000 0.060 13.64 5.3.1 0.010 0.053 13.66 5.3.0 0.007 0.070 13.56
preferences:dark mode live preview
139.32 ms | 1394 KiB | 7 Q