Blog : Convert XML to an array in PHP

Convert XML to an array in PHP


Code


/**
 * Take XML content and convert
 * if to a PHP array.
 * @param string $xml Raw XML data.
 * @param string $main_heading If there is a primary heading within the XML that you only want the array for.
 * @return array XML data in array format.
 */
function xml_to_array($xml,$main_heading = '') {
  $deXml = simplexml_load_string($xml);
  $deJson = json_encode($deXml);
  $xml_array = json_decode($deJson,TRUE);
  if (! empty($main_heading)) {
  $returned = $xml_array[$main_heading];
  return $returned;
  } else {
  return $xml_array;
  }
}

Explanation

Consider the following XML data:

$xml = '
  John
  Doe
 
  123 Street  Apt. 9
  Chicago


Getting all XML data into an array

$data_array = xml_to_array($xml);
var_dump($data_array);

The output would be:

array (size=3)
  'first_name' => string 'John' (length=4)
  'last_name' => string 'Doe' (length=3)
  'address' =>
  array (size=3)
  'line1' => string '123 Street' (length=10)
  'line2' => string 'Apt. 9' (length=6)
  'city' => string 'Chicago' (length=7)

Getting the address only into an array

$data_array = xml_to_array($xml,'address');
var_dump($data_array);

The output would be:

array (size=3)
  'line1' => string '123 Street' (length=10)
  'line2' => string 'Apt. 9' (length=6)
  'city' => string 'Chicago' (length=7)