将数组转换为XML或JSON

时间:2012-02-05 19:17:37

标签: php xml arrays json

我想转换下面的数组

Array
(
    [city] => Array
        (
            [0] => Array
                (
                    [0] => Rd
                    [1] => E
                )

            [1] => B
            [2] => P
            [3] => R
            [4] => S
            [5] => G
            [6] => C
        )

    [dis] => 1.4
)

转换为XML格式或JSON。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:4)

JSON,使用json_encode函数:

<?php echo json_encode( $array); ?>

XML,请参阅this question

答案 1 :(得分:4)

这适用于关联数组。

    function array2xml($array, $node_name="root") {
    $dom = new DOMDocument('1.0', 'UTF-8');
    $dom->formatOutput = true;
    $root = $dom->createElement($node_name);
    $dom->appendChild($root);

    $array2xml = function ($node, $array) use ($dom, &$array2xml) {
        foreach($array as $key => $value){
            if ( is_array($value) ) {
                $n = $dom->createElement($key);
                $node->appendChild($n);
                $array2xml($n, $value);
            }else{
                $attr = $dom->createAttribute($key);
                $attr->value = $value;
                $node->appendChild($attr);
            }
        }
    };

    $array2xml($root, $array);

    return $dom->saveXML();
}

答案 2 :(得分:2)

您使用的是哪种编程语言?

如果您使用的是PHP,可以使用以下内容转换为JSON:

$json = json_encode($your_array);

对于XML,您可以查看以下答案:How to convert array to SimpleXML

希望它有所帮助。

答案 3 :(得分:0)

注意: XML元素名称的数字并不是一个好主意,因此$ your_array不应包含键的数字。

试试这个:

$your_array = array(
        'city' => array
            (
            '0' => array('0' => 'Rd', '1' => 'E'),
            '1' => 'B',
            '2' => 'P',
            '3' => 'R',
            '4' => 'S',
            '5' => 'G',
            '6' => 'C'
            ),
        'dis' => '1.4'
        );

下面的函数调用自身(递归),因此它适用于任何深度的数组。

函数使用三元运算符:

(condition) ? if true action : if false action

...检查所调用的值是否为数组。

如果是数组,则调用自身(递归)深入挖掘,如果value不是数组,则将其附加到XML对象,使用元素名称的数组键和元素值的数组值。

function array_to_xml(array $your_array, SimpleXMLElement $xml){
    foreach ($arr as $k => $v){
        is_array($v) ? array_to_xml($v, $xml->addChild($k)) : $xml->addChild($k, $v);
    }
    return $xml;
}

$your_xml = $this->array_to_xml($your_array, new SimpleXMLElement(''))->asXML();

现在,您的数组是一个XML,并且包含在$ your_xml变量中,因此您可以随意使用它。

$ your_xml输出(例如,如果你&#39; echo&#39;它)将如下所示:

<root>
    <city>
        <0>
            <0>Rd</0>
            <1>E</1>
        </0>
        <1>B</1>
        <2>P</2>
        <3>R</3>
        <4>S</4>
        <5>G</5>
        <6>C</6>
    </city>
    <dis>1.4</dis>
</root>