XML na matriz associativa usando PHP
Alguém pode ajudar na conversão de dados de um documento XML em uma matriz associativa? Estou enfrentando problemas, uma vez que a estrutura XML é uma espécie de 3D e a matriz é mais uma estrutura 2D (perdoe minha falta de terminologia correta). Os elementos XML têm atributos, filhos e netos (mas nunca sei o nome deles), então imaginei que tentaria fazer da chave na matriz uma concatenação de cada nome filho / atributo e o valor igual a, bem, O valor que. O problema é que preciso do nome e do valor do atributo como parte da chave da matriz concatenada para torná-lo único ...
Por exemplo
<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>
Deve idealmente dar:
[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'
Mas estou obtendo este resultado:
[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'
Para que a tecla [ID do computador] não seja exclusiva. Estou usando uma função recursiva para ler os valores, mas não consigo descobrir como obter o nome do atributo e o valor do atributo no nome das chaves subordinadas ... (A propósito, há uma boa razão para fazer isso tarefa aparentemente ilógica!) Qualquer ajuda seria muito apreciada ...
Aqui está a função que 'nivela' os dados XML após serem lidos em uma matriz multidimensional. Não tenho certeza se vou fazer isso da maneira certa!
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";
}
}
}