我想转换下面的数组
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 :(得分:4)
答案 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输出(例如,如果你' echo'它)将如下所示:
<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>