[PHP] waarde van callback niet toe te wijzen aan array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 27-06 09:34
Ik ben geïnteresseerd in een bepaald deel van een XML. Om de waardes uit de XML te krijgen parse ik de XML m.b.v. de XML parser van PHP. Het deel waarin ik geïnteresseerd ben ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
</Accounts>
<extraContactInfo> <----------------------------------------------------vanaf hier
    <contact_email>test@test.au</contact_email>
    <contact_mobile></contact_mobile>
    <contact_function></contact_function>
    <exactdb>001</exactdb>
</extraContactInfo> <----------------------------------------------------t/m hier
</eExact>


Mijn xml_set_character_data_handler ziet er zo uit:
PHP:
1
2
3
4
5
6
7
8
9
function tagData($parser, $txt){
        global $currentTag;
        global $arr;
        
        if($currentTag == 'contact_email'){ 
            $arr[$currentTag] = $txt;
            echo $txt;
        }
}
(er zitten nog meer if-jes in maar voor het idee is dit voldoende)

Ik verwacht dat mijn array er straks zoiets uitziet:
code:
1
2
3
4
contactdata: Array
(
    [contact_email] => test@test.au
)


Maar hier gaat het mis. Als ik een var dump doe van $arr krijg ik netjes bovenstaande, maar dan zonder het emailadres. Dat betekent dat hij in de callbackfunctie komt, in de if komt maar niet de waarde van $txt in de array schrijft.

Helemaal vreemd wordt het, dat 'echo' wel degelijk een emailadres op het scherm print, waaruit ik concludeer dat $txt dus gevuld is.

Waarom wordt de array niet gevuld, terwijl $txt een waarde bevat?

Acties:
  • 0 Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 12:22

samo

yo/wassup

Omdat je - zoals de code hier staat - de waarde opslaat in een array die alleen binnen die functie beschikbaar is.

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


Acties:
  • 0 Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 27-06 09:34
Dat leek mij eerst ook maar door global is de array toch ook buiten de functie beschikbaar?

Overigens heb ik ook al geprobeerd de array al voor de functie te declareren....met hetzelfde resultaat als nu.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Deze library, tezamen met jouw global var code style, is om te jankensuboptimaal. Pak alsjeblieft gewoon een betere parser erbij die alles voor je doet, zoals bijvoorbeeld (1 willekeurige vd 10 nieuwere opties) SimpleXML.

En leer jezelf af om global vars te gebruiken.

{signature}


Acties:
  • 0 Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 27-06 09:34
SimpleXML had ik aan gedacht maar nog niet aan toegekomen om het te proberen. Meer onder het mom van: waarom werkt dit niet?

Is deze library echt zo slecht? Welke zou je nog meer aanbevelen?

Oh...en globals doe ik niet aan hoor, alleen in dit geval ;)

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 11:28
Heb je hier niet return values voor? $hierMijnData = functieOmUitTeVoeren($dataInvoer);

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
peterkuli schreef op dinsdag 05 juli 2011 @ 20:25:
SimpleXML had ik aan gedacht maar nog niet aan toegekomen om het te proberen. Meer onder het mom van: waarom werkt dit niet?
Probeer het eens en je weet het verschil. :)
Oh...en globals doe ik niet aan hoor, alleen in dit geval ;)
In dit geval moet je ook zonder kunnen.

{signature}


Acties:
  • 0 Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 27-06 09:34
Voutloos schreef op dinsdag 05 juli 2011 @ 20:52:

Probeer het eens en je weet het verschil. :)
Heb het al wel eens gebruikt maar ook daar zitten rare dingen in. Weet niet precies meer wat het was maar had iets te maken met dat als de resource gesloten wordt, de variabelen waarin XML data staat ook niet meer bestaan of null zijn o.i.d.
In dit geval moet je ook zonder kunnen.
In dit geval zou ik niet weten hoe...

Edit:
ZpAz schreef op dinsdag 05 juli 2011 @ 20:27:
Heb je hier niet return values voor? $hierMijnData = functieOmUitTeVoeren($dataInvoer);
Het is een callback functie die de data leest, dus wordt niet door eigen code aangeroepen, dus waar wordt er naar toe ge-returned?

[ Voor 25% gewijzigd door peterkuli op 05-07-2011 21:05 ]

Pagina: 1