简体   繁体   中英

How to convert XML into the array with PHP?

I'm trying to split an XML in the array, below is my php codes:

  <?php
     $xml = simplexml_load_file("test.xml") or die("Error: Cannot create object");

     foreach($xml->children() as $books) { 
        echo $books->title . "<br> "; 
        echo $books->tutor . "<br> "; 
        echo $books->duration . "<br> ";
        echo $books->price . "<hr>"; 


     }
  ?>

Below is my XML codes:

<?xml version = "1.0" encoding = "utf-8"?>
<tutorialspoint>

<course category = "JAVA">
  <title lang = "en">Java</title>
  <tutor>Gopal</tutor>
  <duration>3</duration>
  <price>$30</price>
</course>

<course category = "HADOOP">
  <title lang = "en">Hadoop</title>.
  <tutor>Satish</tutor>
  <duration>3</duration>
  <price>$50</price>
</course>

<course category = "HTML">
  <title lang = "en">html</title>
  <tutor>raju</tutor>
  <duration>5</duration>
  <price>$50</price>
</course>

<course category = "WEB">
  <title lang = "en">Web Technologies</title>
  <tutor>Javed</tutor>
  <duration>10</duration>
  <price>$60</price>
</course>

</tutorialspoint>

But it gave the output show me in below: enter image description here

I want to convert XML into the array with PHP, but can't work. Actually the output I want like in below example codes:

Array
(
[0] => Array
    (
        [title] => Java
        [tutor] => Gopal
        [duration] => 3
        [price] => $30
    )

[1] => Array
    (
        [title] => Hadoop
        [tutor] => Satish
        [duration] => 3
        [price] => $50
    )

[2] => Array
    (
        [title] => HTML
        [tutor] => raju
        [duration] => 5
        [price] => $50
    )

[3] => Array
    (
        [title] => Web Technologies
        [tutor] => Javed
        [duration] => 10
        [price] => $60
    )

I don't know how to set them into the array like above the example output. Hope someone can help me. Thanks.

This code snippet will convert your XML to array

$array = json_decode(json_encode((array)simplexml_load_string($xml)),true);
echo '<pre>';
print_r($array);

You can json_encode() then json_decode() as array and use simplexml_load_string()

Steps:

1) First convert your XML into readable string object using simplexml_load_string() .

2) Then json_encode() it.

3) json_decode() it, with second parameter TRUE , which will return array instead of object.

4) Now, your XML is converted into an array.

5) Take a blank array, loop over array from above code and append elements to it.

To get desired output:

<?php
$xml = '<?xml version = "1.0" encoding = "utf-8"?>
<tutorialspoint>

<course category = "JAVA">
  <title lang = "en">Java</title>
  <tutor>Gopal</tutor>
  <duration>3</duration>
  <price>$30</price>
</course>

<course category = "HADOOP">
  <title lang = "en">Hadoop</title>.
  <tutor>Satish</tutor>
  <duration>3</duration>
  <price>$50</price>
</course>

<course category = "HTML">
  <title lang = "en">html</title>
  <tutor>raju</tutor>
  <duration>5</duration>
  <price>$50</price>
</course>

<course category = "WEB">
  <title lang = "en">Web Technologies</title>
  <tutor>Javed</tutor>
  <duration>10</duration>
  <price>$60</price>
</course>
</tutorialspoint>';

$arr = [];
$array = json_decode(json_encode(simplexml_load_string($xml)),true);
if ( ! empty($array)) {
 $i=0;
 foreach ($array['course'] as $elem) {
   $arr[$i]['title'] = $elem['title'];
   $arr[$i]['tutor'] = $elem['tutor'];
   $arr[$i]['duration'] = $elem['duration'];
   $arr[$i]['price'] = $elem['price'];
  ++$i;
 }
}
echo '<pre>';print_r($arr);echo '</pre>';

Output:

Array
(
    [0] => Array
        (
            [title] => Java
            [tutor] => Gopal
            [duration] => 3
            [price] => $30
        )

    [1] => Array
        (
            [title] => Hadoop
            [tutor] => Satish
            [duration] => 3
            [price] => $50
        )

    [2] => Array
        (
            [title] => html
            [tutor] => raju
            [duration] => 5
            [price] => $50
        )

    [3] => Array
        (
            [title] => Web Technologies
            [tutor] => Javed
            [duration] => 10
            [price] => $60
        )

)

Working Code:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM