Toegang tot object data lukt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fred Verhoeckx

Fred Verhoeckx

01/01/2014 13:11:39
Quote Anchor link
Een gelukkig Nieuwjaar!

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.
 
PHP hulp

PHP hulp

27/12/2024 13:33:05
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/01/2014 14:06:57
Quote Anchor link
Ben absoluut niet zeker van jouw verhaal maar wellicht bedoel je dat $myvar1->items een array teruggeeft.

Doe eens dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo '<pre>';
print_r($myvar1->items);
echo '</pre>';
?>


en laat eens zien wat je terugkrijgt? (of een stukje als het erg veel is)
 
Fred Verhoeckx

Fred Verhoeckx

01/01/2014 16:27:43
Quote Anchor link
Bedankt Frank. Jouw commando geeft de output zoals hier getoond. Dat is identiek aan wat ik al eerder heb verkregen:

... (Object) stdClass
1 (Object) stdClass
2 (Object) stdClass
3 (Object) stdClass
4 (Object) stdClass
 
Ozzie PHP

Ozzie PHP

01/01/2014 17:33:07
Quote Anchor link
Hallo Fred,

Welkom op het forum en ook voor jou de beste wensen!

Kun je even dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($myvar1->items);
?>

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
 
Fred Verhoeckx

Fred Verhoeckx

01/01/2014 19:55:22
Quote Anchor link
Hallo Ozzie,

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$lights1 = $lights->1;


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
 
Fred Verhoeckx

Fred Verhoeckx

05/01/2014 01:02:17
Quote Anchor link
Het punt is, dat deze json string een object lights defineert met properties 1,2,3 en 4.

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 .
 
Ozzie PHP

Ozzie PHP

05/01/2014 01:06:36
Quote Anchor link
Zover ik weet mogen properties/variabelen in PHP niet met een cijfer beginnen, dus ik denk dat het daar verkeerd gaat.
 
Fred Verhoeckx

Fred Verhoeckx

05/01/2014 19:52:07
Quote Anchor link
Probleem opgelost! Inderdaad kan een property naam niet met een cijfer beginnen. Ik heb op php.net de json_decode documentatie eens aandachtig doorgelezen. Json_decode converteert zonder foutmelding mijn string naar het object $lights.

De documentatie geeft vervolgens aan hoe te handelen als er niet-php compatibele namen worden gebruikt. Voor mij werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$lights1 = $lights->{'1'};


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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.