Toegang tot object data lukt niet
Ik ben een php-nieuweling en loop zo nu en dan tegen een probleempje op dat ik niet kan oplossen door zoeken in tutorials e.d. Het kan zijn dat ik niet de juiste terminologie gebruik.
Ik bouw een webapplicatie. Het lukt om gegevens binnen te krijgen via een http request. Ik probeer nu iets met die gegevens te doen.
De structuur van het object kan ik zien door deze op mijn testsite op het scherm te dumpen.
Ik kan daardoor sub structuren in nieuwe variabelen gieten.
Voorbeeld: $myvar1 = $myresult->data;
$myvar2 = $myvar1->items;
Myvar2 bevat 4 equivalente sub objecten (std Class), genaamd 1, 2, 3 en 4.
Bij gebruik van $myitem1 = $myvar2->1 krijg ik echter geen goed resultaat.
Hoe kan ik bij die 4 sub objecten komen? Is de gebruikte syntax niet goed?
Natuurlijk heb ik al van alles geprobeerd.
Ik gebruik php 5.3.27 vanuit Drupal 7.2.
Doe eens dit:
en laat eens zien wat je terugkrijgt? (of een stukje als het erg veel is)
... (Object) stdClass
1 (Object) stdClass
2 (Object) stdClass
3 (Object) stdClass
4 (Object) stdClass
Welkom op het forum en ook voor jou de beste wensen!
Kun je even dit doen:
Vervolgens wat je op het scherm ziet even kopiëren en dan tussen de code tags plakken. Code tags maak je zo [*code][*/code] maar dan zonder de sterretjes *.
Gewijzigd op 01/01/2014 17:38:34 door Ozzie PHP
var_dump geeft geen output in de omgeving (een php command binnen Drupal / Rules) die ik gebruik. En (Frank)bij nader inzien geeft print_r ook geen output.
Ik gebruik het commando dpm($variable). (Krumo version 0.2.1a | http://krumo.sourceforge.net). Dat geeft de struktuur van de variabele , maar helaas niet als plain text.
Ik ga eens zoeken of var_dump en print_r zouden moeten werken.
Toevoeging op 01/01/2014 21:06:23:
Omdat ik het resultaat van dpm($items) hier niet kan geven, geef ik de data in z'n JSON vorm. Ik heb die beschikbaar omdat de gegevens zo via http binnenkomen. "items" staat in feite voor "lights". Ik wil kunnen beschikken over de afzonderlijke elementen in lights (1,2,3 en 4) en ze opslaan in variabelen $light1, $light2, $light3 en $light4.
Ik zou denken dat hetvolgende zou moeten werken:
Vanwege leesbaarheid heb ik de JSON string ietwat geformatteerd:
"lights":{
"1":{"state": {"on":false,"bri":78,"hue":4980,"sat":149,"xy":[0.5229,0.3670],"ct":488,"alert":"select","effect":"none","colormode":"xy","reachable":true}, "type": "Extended color light", "name": "Huiskamer", "modelid": "LCT001", "swversion": "66010820", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }},
"2":{"state": {"on":false,"bri":78,"hue":125,"sat":49,"xy":[0.4370,0.3664],"ct":331,"alert":"select","effect":"none","colormode":"xy","reachable":true}, "type": "Extended color light", "name": "Huiskamer 1", "modelid": "LCT001", "swversion": "66010820", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }},
"3":{"state": {"on":false,"bri":78,"hue":683,"sat":76,"xy":[0.4664,0.3620],"ct":379,"alert":"select","effect":"none","colormode":"xy","reachable":true}, "type": "Extended color light", "name": "Huiskamer 2", "modelid": "LCT001", "swversion": "66010820", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }},
"4":{"state": {"on":false,"bri":174,"hue":11634,"sat":252,"xy":[0.5527,0.4108],"ct":500,"alert":"none","effect":"none","colormode":"xy","reachable":true}, "type": "Extended color light", "name": "Slaapkamer", "modelid": "LCT001", "swversion": "66009663", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }}}
Gewijzigd op 01/01/2014 21:40:48 door Fred Verhoeckx
Klaarblijkelijk is zo'n object geen standaard PHP. Ik zal eens proberen om eerst de json string aan te passen, bijvoorbeeld door een valide teken voor de cijfers te zetten.
Ik vrrag me nog wel af hoe het komt dat de Drupal dpm functie wel in staat is om het object weer te geven. Ook json_decode trekt zich kennelijk niet aan van de cijfers als property name .
Zover ik weet mogen properties/variabelen in PHP niet met een cijfer beginnen, dus ik denk dat het daar verkeerd gaat.
De documentatie geeft vervolgens aan hoe te handelen als er niet-php compatibele namen worden gebruikt. Voor mij werkt:
Zie: http://nl1.php.net/json_decode Example #2.
Ik kan nu rustig verder met mijn project om een set van Philips Hue LED lampen aan te sturen vanuit Drupal. Zie o.a: http://developers.meethue.com/index.html
Bedankt allemaal!
Gewijzigd op 05/01/2014 20:03:30 door Fred Verhoeckx