@ 2013-08-28T14:42:49Z <?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.4.19 0.008 0.038 12.42 5.4.18 0.007 0.039 12.42 5.4.17 0.010 0.073 18.63 5.4.16 0.003 0.073 18.87 5.4.15 0.013 0.070 18.82 5.4.14 0.003 0.057 16.37 5.4.13 0.010 0.043 16.45 5.4.12 0.003 0.077 16.36 5.4.11 0.007 0.050 16.36 5.4.10 0.013 0.063 16.55 5.4.9 0.007 0.047 16.49 5.4.8 0.007 0.047 16.54 5.4.7 0.003 0.057 16.61 5.4.6 0.013 0.043 16.46 5.4.5 0.007 0.047 16.34 5.4.4 0.013 0.043 16.46 5.4.3 0.003 0.053 16.42 5.4.2 0.013 0.050 16.28 5.4.1 0.010 0.060 16.35 5.4.0 0.000 0.053 15.80 5.3.27 0.010 0.073 14.62 5.3.26 0.003 0.077 14.31 5.3.25 0.010 0.070 14.52 5.3.24 0.003 0.057 14.61 5.3.23 0.007 0.050 14.60 5.3.22 0.007 0.050 14.59 5.3.21 0.003 0.057 14.57 5.3.20 0.010 0.063 14.57 5.3.19 0.017 0.057 14.57 5.3.18 0.007 0.047 14.57 5.3.17 0.020 0.033 14.59 5.3.16 0.003 0.050 14.66 5.3.15 0.007 0.050 14.48 5.3.14 0.007 0.050 14.45 5.3.13 0.010 0.050 14.32 5.3.12 0.007 0.073 14.57 5.3.11 0.020 0.060 14.39 5.3.10 0.003 0.053 14.19 5.3.9 0.007 0.063 13.91 5.3.8 0.003 0.057 13.96 5.3.7 0.007 0.050 13.90 5.3.6 0.013 0.040 14.04 5.3.5 0.010 0.043 13.71 5.3.4 0.007 0.070 13.87 5.3.3 0.013 0.037 13.75 5.3.2 0.000 0.057 13.60 5.3.1 0.007 0.043 13.74 5.3.0 0.003 0.053 13.58
preferences:dark mode live preview
143.97 ms | 1394 KiB | 7 Q