I'm trying to create a function which converts an HTMl string to a multidimensional array where the parent array is the tag and the children are the attributes, but if I print_r()
my function it doesn't return every element.
The string is originaly a part of a big object and looks like this:
Array
(
[0] => stdClass Object
(
[html] =>
<input type="radio" name="radio1" value="18" checked="checked" id="80">
<label class="other" for="80">Label for radio 1</label>
<input type="radio" name="radio2" value="20" id="81">
<label class="other" for="81">Label for radio 2</label>
)
[1] => stdClass Object
(
[html] =>
<input type="radio" name="radio3" value="19" checked="checked" id="91">
<label class="other" for="91">Label for radio 3</label>
<input type="radio" name="radio4" value="21" id="92">
<label class="other" for="92">Label for radio 4</label>
)
)
and this is my function:
<?php
function htmltoarray($param){
$doc = new DOMDocument();
$doc->loadHTML($param);
$doc->preserveWhiteSpace = false;
$html = $doc->getElementsByTagName('*');
$form = array();
foreach($html as $v){
$tag = $v->nodeName;
$val = $v->nodeValue;
foreach($v->attributes as $k => $a){
$form[$tag]['txt'] = utf8_decode($val);
$form[$tag][$k] = $a->nodeValue;
}
}
return $form;
}
// AND I CALL THE FUNCTION HERE:
foreach($myobject as $formelement){
$convertthis = $formelement->html;
echo '<pre>'; print_r(htmltoarray($convertthis)); echo '</pre>';
}
?>
and this returns this:
<pre>Array
(
[input] => Array
(
[txt] =>
[id] => 80
[checked] => checked
[type] => radio
[value] => 20
[name] => radio1
)
[label] => Array
(
[txt] => Label for radio 1
[for] => 80
[class] => other
)
)
</pre>
<pre>Array
(
[input] => Array
(
[txt] =>
[id] => 92
[checked] => checked
[type] => radio
[value] => 21
[name] => radio4
)
[label] => Array
(
[txt] => Label for radio 4
[for] => 92
[class] => other
)
)
</pre>
As you see it returns the the first two elements from the first string and the last two from the second string.
What am I missing? Why is this strange retun and how can I fix it to return every element?