developer tip

SimpleXML 개체를 배열로 변환

copycodes 2020. 11. 20. 09:04
반응형

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

반응형