将数组转换为XML或JSON

3

我想要转换下面的数组:

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,有人可以帮忙吗?

可能是重复的问题:如何将数组转换为SimpleXML - nickb
1
请查看https://dev59.com/6XM_5IYBdhLWcg3wZSI6作为示例。 - Loïc G.
4个回答

4

要使用JSON,可以使用json_encode函数:

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

XML,参见此问题


json_encode函数将数组转换为json格式,但是子数组的键未被移除.. 你能提供一个函数以显示所有元素的json吗? - known reg

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

你使用哪种编程语言?

如果你使用的是PHP,你可以使用以下代码将其转换为JSON:

$json = json_encode($your_array);

对于 XML,您可以查看以下回答:如何将数组转换为 SimpleXML
希望这可以帮助您。

1
抱歉,它没有帮助。这些示例不支持数字索引,您能否就这些数组给我更多反馈? - known reg

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

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

如果它是数组,则调用自身(递归)以进行更深层次的挖掘,如果值不是数组,则将其附加到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 的输出结果(例如,如果您使用 'echo' 命令)将如下所示:

<根>
    <城市>
        <0>
            <0>路</0>
            <1>东</1>
        </0>
        <1>B</1>
        <2>P</2>
        <3>R</3>
        <4>S</4>
        <5>G</5>
        <6>C</6>
    </城市>
    <距离>1.4</距离>
</根>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接