source

SimpleXML 개체를 배열로 변환하는 방법

lovecheck 2023. 1. 22. 22:33
반응형

SimpleXML 개체를 배열로 변환하는 방법

여기서 SimpleXML 개체를 배열로 변환하는 기능을 발견했습니다.

/**
 * function object2array - A simpler way to transform the result into an array 
 *   (requires json module).
 *
 * This function is part of the PHP manual.
 *
 * The PHP manual text and comments are covered by the Creative Commons 
 * Attribution 3.0 License, copyright (c) the PHP Documentation Group
 *
 * @author  Diego Araos, diego at klapmedia dot com
 * @date    2011-02-05 04:57 UTC
 * @link    http://www.php.net/manual/en/function.simplexml-load-string.php#102277
 * @license http://www.php.net/license/index.php#doc-lic
 * @license http://creativecommons.org/licenses/by/3.0/
 * @license CC-BY-3.0 <http://spdx.org/licenses/CC-BY-3.0>
 */
function object2array($object)
{
    return json_decode(json_encode($object), TRUE); 
}

XML 문자열은 다음과 같습니다.

function xmlstring2array($string)
{
    $xml   = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA);

    $array = json_decode(json_encode($xml), TRUE);

    return $array;
}

꽤 잘 먹히긴 하는데 좀 허술한 것 같아요?보다 효율적이고 견고한 방법이 있습니까?

SimpleXML 오브젝트는 PHP의 ArrayAccess 인터페이스를 사용하기 때문에 어레이에 충분히 가깝다는 것을 알고 있지만, 다차원 어레이를 사용한 어레이로 사용하기에는 아직 적합하지 않습니다(루핑).

도와주셔서 감사합니다.

PHP 매뉴얼 코멘트에는 다음과 같은 내용이 다음과 같이 기재되어 있습니다.

/**
 * function xml2array
 *
 * This function is part of the PHP manual.
 *
 * The PHP manual text and comments are covered by the Creative Commons 
 * Attribution 3.0 License, copyright (c) the PHP Documentation Group
 *
 * @author  k dot antczak at livedata dot pl
 * @date    2011-04-22 06:08 UTC
 * @link    http://www.php.net/manual/en/ref.simplexml.php#103617
 * @license http://www.php.net/license/index.php#doc-lic
 * @license http://creativecommons.org/licenses/by/3.0/
 * @license CC-BY-3.0 <http://spdx.org/licenses/CC-BY-3.0>
 */
function xml2array ( $xmlObject, $out = array () )
{
    foreach ( (array) $xmlObject as $index => $node )
        $out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;

    return $out;
}

도움이 될 거야그러나 XML을 배열로 변환하면 존재하는 모든 속성이 손실되므로 XML로 돌아가서 동일한 XML을 가져올 수 없습니다.

그저.(array)simplexml 오브젝트 앞 코드에 없습니다.

...

$xml   = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA);

$array = json_decode(json_encode((array)$xml), TRUE);
                                 ^^^^^^^
...

언급URL : https://stackoverflow.com/questions/6167279/converting-a-simplexml-object-to-an-array

반응형