SimpleXML Attributes to Array

arrays, attributes, php, simplexml

Solution

Don't directly read the `'@attributes'` property, that's for internal use. Anyway, `attributes()` can already be used as an array without needing to "convert" to a real array.

For example:

<?php
$xml = '<xml><test><a a="b" r="x" q="v" /></test><b/></xml>';
$x = new SimpleXMLElement($xml);

$attr = $x->test[0]->a[0]->attributes();
echo $attr['a']; // "b"

If you want it to be a "true" array, you're gonna have to loop:

$attrArray = array();
$attr = $x->test[0]->a[0]->attributes();

foreach($attr as $key=>$val){
    $attrArray[(string)$key] = (string)$val;
}

Problem

Is there any more elegant way to escape SimpleXML attributes to an array? ``` $result = $xml->xpath( $xpath ); $element = $result[ 0 ]; $attributes = (array) $element->attributes(); $attributes = $attributes[ '@attributes' ]; ``` I don't really want to have to loop through it just to extract the key/value pair. All I need is to get it into an array and then pass it on. I would have thought `attributes()` would have done it by default, or at least given the option. But I couldn't even find the above solution anywhere, I had to figure that out on my own. Am I over complicating this or something? Edit: I'm still using the above script until I know for sure whether accessing the @attributes array is safe or not.

Original source