2012-02-05 45 views
2

我想将数组转换下面将数组到XML或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。有人可能会帮忙吗?

+0

可能重复[如何数组转换为SimpleXML的(http://stackoverflow.com/questions/1397036/how-to-convert-array-to-simplexml) – nickb 2012-02-05 19:22:45

+1

看看http://stackoverflow.com/questions/1397036/how-to-convert-array-to-simplexml例如 – 2012-02-05 19:23:13

回答

3

这适用于关联数组。

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(); 
} 
4

JSON,使用json_encode功能:

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

XML,看到this question

+0

json_encode转换数组inton json格式,但关键没有被删除的子数组..你能否提出一个函数来显示json中的所有元素请 – 2012-02-06 18:41:29

2

您使用哪种编程语言?

如果您使用的是PHP,你可以使用以下方法来转换成JSON:

$json = json_encode($your_array); 

而对于XML,你可以检查以下答案:How to convert array to SimpleXML

希望它有帮助。

+1

抱歉,但它没有帮助..例子不支持数字索引可以给我更多请在这些阵列上反馈 – 2012-02-06 18:40:15

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输出(例如,如果你“回响”它)是这样的:

 
<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>