Toon posts:

[PHP&XML] Each loop geeft ongewenste waarden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey beste mensen ik wil het volgende bereiken om een xml bestand te maken:

code:
1
2
3
4
5
<Item ID="9481">
     <KlantID>9481</KlantID>
     <KlantInvoer>2006-08-08 09:59:58</KlantInvoer>
     <KlantUpdate>2006-08-14 02:23:03</KlantUpdate>
</Item>


Het bovenstaande zou gevormd moeten worden met de volgende loop:

code:
1
2
3
4
5
6
7
$this->_repeaterXMLRows .= '<Item ID="'.$KlantID.'">'."\n";

while($ItemNode = each($ItemArray)){
     $this->_repeaterXMLRows .= '<'.$ItemNode[key].'>'.$ItemNode[value].'</'.$ItemNode[key].'>'."\n";
}   

$this->_repeaterXMLRows .= '</Item>'."\n";


Ik doe dus iets verkeerd.. of er gaat iets fout. Het volgende ontstaat namelijk:

code:
1
2
3
4
5
6
7
8
<Item ID="9481">
     <0>9481</0>
     <KlantID>9481</KlantID>
     <1>2006-08-08 09:59:58</1>
     <KlantInvoer>2006-08-08 09:59:58</KlantInvoer>
     <2>2006-08-14 02:23:03</2>
     <KlantUpdate>2006-08-14 02:23:03</KlantUpdate>
</Item>


Ik zit nou al heel de tijd vanalles te proberen met verschillende loops maar ik kom er niet uit...
Bij de each loop wordt iedere keer een regel toegevoegd (de regel met de nummerieke nodename) die ik helemaal niet wil is er dus een andere optie?

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Laat me raden: je ItemArray komt uit een mysql_fetch_array() call. Kijk eens naar het meegeven van MYSQL_FETCH_ASSOC aan die call als tweede parameter, dan gaat het een stuk beter, vermoed ik.

Als je er trouwens een beter soort XML van wil maken zou ik de spatie in je timestamps vervangen door een T; dat maakt het timestamp compliant met ISO 8601, de manier waarop data in XML worden gerepresenteerd (idealiter zet je er ook nog een timezone bij).

[ Voor 40% gewijzigd door djc op 14-08-2006 12:27 ]

Rustacean


Verwijderd

Topicstarter
Thx! Daar zat het probleem idd.

ik heb nu:

code:
1
2
3
while($Row = @mysql_fetch_array($QueryResult, MYSQL_ASSOC)){
     ...
}



Dat van die standaard ga ik even bekijken!!!

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 22-10-2025
Het is trouwens zowiezo geen slechte gewoonte om altijd MYSQL_ASSOC mee te geven. Dit omdat het geheugenverbruik van je query anders 2x zo groot is terwijl 99% van de keren je geen gebruik zult maken van de numerieke indexen.

Lets remove all security labels and let the problem of stupidity solve itself


Verwijderd

Topicstarter
iKKe007 schreef op maandag 14 augustus 2006 @ 20:54:
Het is trouwens zowiezo geen slechte gewoonte om altijd MYSQL_ASSOC mee te geven. Dit omdat het geheugenverbruik van je query anders 2x zo groot is terwijl 99% van de keren je geen gebruik zult maken van de numerieke indexen.
Dat is inderdaad een handige tip! Bij kleine arrays is dat natuurlijk niet zon probleem maar als je honderden items gaat gebruiken kan ik begrijpen dat dit aan de prestaties gaat trekken.

Thx!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Ik vind het niet zo'n issue. Ik weet niet hoor, maar volgens mij zijn je databaserijen over het algemeen niet zo groot. Als je echt op de kleintjes wil letten kan je beter mysql_fetch_row() gebruiken, dan krijg je een array terug met numerieke index in plaats van associatieve index, en die gebruikt hoogstwaarschijnlijk nog weer minder geheugen (en zal iets sneller zijn dan de associatieve versie).

Overigens kan je dus ook mysql_fetch_assoc() gebruiken in plaats van de extra constante als param.

Rustacean

Pagina: 1