2009-04-09 14 views
3

Je veux créer une liste triable qui ressemble àParsing des flux XML avec PHP multiples en un seul tableau trié

  • $ VAR1 [0], $ var2 [0] ...
  • $ VAR1 [ 1], $ var2 [1] ...

Les données proviennent de plusieurs mêmes fichiers xml structurés:

$xmlfile=" 
<Level1> 
<Level2> 
    <Level2Item VAR1="1" VAR2="2" ... /> 
    <Level2Item VAR1="4" VAR2="5" ... /> 
    <Level2Item VAR1="7" VAR2="8" ... /> 
</Level2> 
</Level1>"; 

//Extract each item 
$xml = new SimpleXMLElement($xmlfile); 
foreach ($xml->Level2[0] as $result) { 
array_push($VAR1Array, $result['VAR1']); 
array_push($VAR2Array, $result['VAR2']); 
//... etc etc 
} 
//sort 
//$sortedArray = sort($VAR1Array); 

sortie

À partir de cette structure XML, quelle est la meilleure façon de stocker les données dans un tableau?
Array(
    [0] => SimpleXMLElement Object([0] => 1) 
    [1] => SimpleXMLElement Object([0] => 4) 
    [2] => SimpleXMLElement Object([0] => 7) 
) 

Je veux être en mesure de rassembler toutes les données dans un tableau afin que je puisse le trier par un ou deux VAR et afficher les résultats.

Répondre

0

Si j'étais vous, je pousserais simplement tous les SimpleXMLElements sur un tableau et utiliserais uasort() avec une fonction de rappel personnalisée pour trier comme vous le désirez. Est-ce que ça marche?

0
$ xml = simplexml_load_file (...); $ table = array(); foreach ($ xml-> Level2 [0] as $ result) $ table [] = $ résultat-> attributs(); fonction cmp_row ($ a, $ b, $ sortColonne) { if ($ a == $ b) return 0; retour ($ a

Vous pouvez également conserver les SimpleXMLElement et les trier directement, si vous voulez, comme apinstein dit.

+0

Je ne sais pas pourquoi cela ne montre pas correctement. Aperçu le montre bien. –

2

Je ne suis pas tout à fait sûr de ce genre d'entre vous le tri vous essayez de faire (vous devrait indiquer quelques exemples). Mais de façon optimale, vous ne chargeront des fragments XML dans votre tableau.

$xmlfile=" 
<Level1> 
<Level2> 
    <Level2Item VAR1="1" VAR2="2" ... /> 
    <Level2Item VAR1="4" VAR2="5" ... /> 
    <Level2Item VAR1="7" VAR2="8" ... /> 
</Level2> 
</Level1>"; 

//Extract each item 
$xml = new SimpleXMLElement($xmlfile); 
foreach ($xml->Level2[0] as $result) { 
$VAR1Array[] = (int) $result['VAR1']; 
$VAR2Array[] = (int) $result['VAR2']; 
//... etc etc 
} 

dernier, sort() œuvres de référence, alors ne dites pas assimiler à une variable (soit un peu sort($array); en tant que ligne entière, puis $array sera trié.Si vous lancez int Comme je le fais dans l'exemple ci-dessus, vous pouvez utiliser la fonction de tri par défaut de php sans utiliser une fonction de comparaison définie par l'utilisateur comme d'autres suggérées. Et array_push est un peu plus lent et plus difficile à lire que d'utiliser la syntaxe $var[] de php pour ajouter un nouvel élément à un tableau.

1

Aussi, je suis tout à fait sûr que vous ne pouvez pas affecter $ xmlfile cette façon (faire guillemets unescaped l'intérieur des guillemets doubles

Dans ce code, la meilleure façon de définir xmlfile de $ serait:.

$xmlfile = <<<XML 
<Level1> 
<Level2> 
    <Level2Item VAR1="1" VAR2="2" ... /> 
    <Level2Item VAR1="4" VAR2="5" ... /> 
    <Level2Item VAR1="7" VAR2="8" ... /> 
</Level2> 
</Level1> 
XML; 

ou

$xmlfile = ' 
<Level1> 
<Level2> 
    <Level2Item VAR1="1" VAR2="2" ... /> 
    <Level2Item VAR1="4" VAR2="5" ... /> 
    <Level2Item VAR1="7" VAR2="8" ... /> 
</Level2> 
</Level1>';