如题,最近在琢磨 php 里把数组转换为 xml 格式的字符串并且支持格式化,昨天搞了一晚上,效果始终不理想。 今天来向各位大佬求助。 我这里贴一个我随便写的数组
$arr = [
'arr1' => 'asdfasdfewrsdfwer',
'arr2' => [
'arr3' => [
'asdfasdf' => 123213,
],
'arr4' => '123123sdfsdf',
'arr5' => [
'arr6' => [
'arr7' => [
'arr8' => [
'123123',
'sadfsdf',
'aserwer53453',
'asdfwetrxcverwt',
],
],
],
],
],
];
再贴一下我写的存在问题的方法
/**
- 数组转换为 xml 格式的字符串
- @param array $arr 需要转换的数组
- @param boolean $format 是否格式化
- @return string xml 格式的字符串 */
$xml = '';
foreach ($arr as $key => $value) {
$xml .= "<$key>";
if (is_array($value)) {
$deep++;
if ($format) {
$xml .= PHP_EOL;
$xml .= str_pad('', $deep * 2, ' ');
}
$xml .= arrayToXml($value, $format, $deep);
$xml .= "</$key>";
} else {
$xml .= $value;
$xml .= "</$key>";
}
if ($format) {
$xml .= PHP_EOL;
$next = next($arr);
prev($arr);
if ($next == false || is_array($next)) {
$xml .= str_pad('', ($deep - 1) * 2, ' ');
} else {
$xml .= str_pad('', $deep * 2, ' ');
}
echo is_array($next) ? ' arr ' : $next;
unset($next);
}
next($arr);
}
return $xml;
}