How to convert SimpleXMLObject into PHP Array?

前端 未结 3 658
谎友^
谎友^ 2021-01-04 03:09

Consider the following code:

$string = \'
    1234
    
    root

        
相关标签:
3条回答
  • 2021-01-04 03:11

    Try This:

    $array = json_decode(json_encode((array)$xml), TRUE);
    
    0 讨论(0)
  • 2021-01-04 03:26

    Try this:

    $string = '<device>
      <id>1234</id>
      <label>118</label>
      <username>root</username>
      <password>helloWorld</password>
      <hardware>
        <memory>4GB RAM</memory>
         <storage_drives>
          <storage_drive_1>2TB SATA 7,200RPM</storage_drive_1>
          <storage_drive_2>1TB SATA 7,200RPM</storage_drive_2>
          <storage_drive_3>Not Applicable</storage_drive_3>
          <storage_drive_4>Not Applicable</storage_drive_4>
        </storage_drives>
      </hardware>
    </device>';
      
    $xml = json_decode(json_encode((array) simplexml_load_string($string)), 1);
    

    This will output:

    Array
    (
        [id] => 1234
        [label] => 118
        [username] => root
        [password] => helloWorld
        [hardware] => Array
            (
                [memory] => 4GB RAM
                [storage_drives] => Array
                    (
                        [storage_drive_1] => 2TB SATA 7,200RPM
                        [storage_drive_2] => 1TB SATA 7,200RPM
                        [storage_drive_3] => Not Applicable
                        [storage_drive_4] => Not Applicable
                    )
    
            )
    
    )
    

    or if you don't like this, you can use a PHP class like: http://www.bin-co.com/php/scripts/xml2array/

    or view dfsq answer

    0 讨论(0)
  • 2021-01-04 03:30

    Book Of Zeus code wrapped in function to make it work recursively:

    function xml2array($xml)
    {
        $arr = array();
    
        foreach ($xml as $element)
        {
            $tag = $element->getName();
            $e = get_object_vars($element);
            if (!empty($e))
            {
                $arr[$tag] = $element instanceof SimpleXMLElement ? xml2array($element) : $e;
            }
            else
            {
                $arr[$tag] = trim($element);
            }
        }
    
        return $arr;
    }
    
    $xml = new SimpleXMLElement($string);
    print_r(xml2array($xml));
    
    Array
    (
        [id] => 1234
        [label] => 118
        [username] => root
        [password] => helloWorld
        [hardware] => Array
        (
            [memory] => 4GB RAM
            [storage_drives] => Array
            (
                [storage_drive_1] => 2TB SATA 7,200RPM
                [storage_drive_2] => 1TB SATA 7,200RPM
                [storage_drive_3] => Not Applicable
                [storage_drive_4] => Not Applicable
            )
        )
    )
    
    0 讨论(0)
提交回复
热议问题