主要目标:以后应该将整个数组转换为XML。
我想做以下事情:对于每个密钥(例如12772),数据都必须从数据库中提取,所以我不能简单地转换它。提取的数据将是标记的属性。
我的想法是将最深的child组合成一个xml字符串。但是,如果我处于最深处,我该如何检测呢?我想了一个do…while循环,但我不知道如何准确地检查元素是否有子元素。
阵列深度可以变化,如您所见:
Array
(
[12772]=>Array
(
[16563]=>Array
(
[0] => <xml>Information 1</xml>
[1] => <xml>Information 2</xml>
)
)
[16532]=>Array
(
[0] => <xml>Information 1</xml>
[1] => <xml>Information 2</xml>
)
)
非常感谢您的帮助!
/编辑:输出应为:
<xml>
<testsuite id='12772' name='fetched from database'>
<testsuite id='16563' name='fetched from database'>
<testcase id='0'>Information 1</testcase>
<testcase id='1'>Information 2</testcase>
</testsuite>
</testsuite>
<testsuite id='16532' name='fetched from database'>
<testcase id='0'>Information 1</testcase>
<testcase id='1'>Information 2</testcase>
</testsuite>
递归是循环到树状结构中的最佳方法。基本上,递归函数是一个调用自身的函数。举例:
$input = Array
(
12772=>Array
(
16563=>Array
(
0 => '<xml>Information 1</xml>',
1 => '<xml>Information 2</xml>'
)
),
16532=>Array
(
0 => '<xml>Information 1</xml>',
1 => '<xml>Information 2</xml>'
)
);
$xml = "";
recursiveFunction($xml, $input);
var_dump($xml);
function recursiveFunction(&$output, $node, $id = 0, $level = 0)
{
if (is_array($node)) {
if ($level === 0) {
$output .= "<xml>" . PHP_EOL;
} else {
$output .= str_repeat("t", $level) . "<testsuite id='" . $id . " name='fetched from database'>" . PHP_EOL;
}
foreach ($node as $id => $newNode) {
recursiveFunction($output, $newNode, $id, $level + 1);
}
if ($level === 0) {
$output .= "</xml>";
} else {
$output .= str_repeat("t", $level) . "</testsuite>" . PHP_EOL;
}
} else {
$output .= str_repeat("t", $level) . "<testcase id='" . $id . "'>" . $node . "</testcase>" . PHP_EOL;
}
}
您可以在此处进行测试:http://sandbox.onlinephpfunctions.com/code/dcabd9ffccc1a05621d8a21ef4b14f29b4a765ca