【发布时间】:2011-09-25 21:38:57
【问题描述】:
任何人都可以帮助将数据从 XML 文档转换为关联数组吗?鉴于 XML 结构有点像 3D,而数组更像是 2D 结构,我遇到了问题(请原谅我在整个过程中缺乏正确的术语)。 XML 元素具有属性、子元素和孙子元素(但我从不知道他们的名字),所以我想我会尝试让数组中的键成为每个子/属性名称的串联,并且值等于,嗯,价值。问题是我需要属性名称和值作为连接数组键的一部分以使其唯一...
例如:
<Computer id="1">
<OS>
<Name>Linux</Name>
<Age>Older than me</Age>
</OS>
</Computer>
<Computer id="2">
<OS>
<Name>Windows</Name>
<Age>Not so much</Age>
</OS>
</Computer>
理想情况下应该给出:
[Computer-id-1-OS-Name] = 'Linux'
[Computer-id-1-OS-Age] = 'Older than me'
[Computer-id-2-OS-Name] = 'Windows'
[Computer-id-2-OS-Age] = 'Not so much'
但是我得到了这个结果:
[Computer-id] = '1'
[Computer-OS-Name] = 'Linux'
[Computer-OS-Age] = 'Older than me'
[Computer-id] = '2'
[Computer-OS-Name] = 'Windows'
[Computer-OS-Age] = 'Not so much'
因此 [Computer-id] 键不是唯一的。我正在使用递归函数来读取值,但我不知道如何将属性名称和属性值获取到从属键的名称中......(顺便说一下,这样做是有充分理由的看似不合逻辑的任务!) 任何帮助将不胜感激...
这是在将 XML 数据读入多维数组后“展平”该数据的函数。我不确定我是否以正确的方式进行此操作!
function flattenArray ($array, $baseName = NULL)
{
reset($array);
while (list ($key, $value) = each($array)) {
$outKey = $key . "-";
if (is_array($value)) {
flattenArray($value, $baseName . $outKey);
} else {
$finalKey = $baseName . rtrim($outKey, '-');
$finalValue = $value;
echo "$finalKey = $finalValue\n";
}
}
}
【问题讨论】:
-
你能贴出给出错误输出的代码吗?
-
使用 XML 库会有所帮助。 php.net/manual/en/refs.xml.php
-
您能解释一下您为什么要这样做吗?为什么不能使用 DOM 或 SimpleXml 提供的树结构?