Toon posts:

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

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 31-05 08:23
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:
  • 0Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 15:42

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:
  • 0Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 31-05 08:23
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:
  • 0Henk '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:
  • 0Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 31-05 08:23
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:
  • 0Henk 'm!

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

Why did the programmer quit his job? - He didn't get arrays.


Acties:
  • 0Henk '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:
  • 0Henk 'm!

  • peterkuli
  • Registratie: September 2003
  • Laatst online: 31-05 08:23
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


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee