[php] item uit een SimpleXMLElement Object halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Ik loop tegen een probleempje aan, volgens mij zie ik iets heel simpels over het hoofd, maar ik kan er niet achter komen hoe ik dit nou wel goed krijg.

Ik maak gebruik van Zend_framework, en van onderdeel Zend_service_twitter om een bericht op twitter te zetten, dat doe ik met deze code:

PHP:
1
2
3
$twitter = new Zend_Service_Twitter('name', 'password');
$msg = 'My Tweet!';
$response = $twitter->status->update($msg);


Heel simpel, en prima werkend.
Wat ik nu wil, is ophalen met welk id het bericht op twitter is geplaatst, dat kan, want dat id zit in het response object met als naam id.

Doe ik: print_r($response->id); dan krijg ik:

SimpleXMLElement Object ( [0] => 6141727640 )

dat is een beetje vreemd volgens mij, want er is dus een variable in het object, met als naam 0. Normaalgesproken kunnen variablen geen cijfer hebben als naam in php.
Een opdracht zoals echo $response->id->0 geeft dus ook een foutmelding.

Iemand enig idee hoe ik de waarde wel uit het SimpleXMLElement Object kan trekken ?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Even casten naar een int, dus:

PHP:
1
2
$id = (int)$response->id;
var_dump($id);

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
om de een of andere reden gaat dat niet goed, ik krijg er wel een getal uit, maar niet het getal dat ik verwacht.

als ik dit doe:
PHP:
1
2
3
print_r($response->id);
$id = (int)$response->id;
print_r($id);


krijg ik: SimpleXMLElement Object ( [0] => 6276594093) 2147483647

voor de volledigheid, dit is wat er in $response zit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Zend_Rest_Client_Result Object
(
    [_sxml:protected] => SimpleXMLElement Object
        (
            [created_at] => Wed Dec 02 18:17:29 +0000 2009
            [id] => 6276594093
            [text] => My tweet!
            [source] => API
            [truncated] => false
            [in_reply_to_status_id] => SimpleXMLElement Object
                (
                )

            [in_reply_to_user_id] => SimpleXMLElement Object
                (
                )

            [favorited] => false
            [in_reply_to_screen_name] => SimpleXMLElement Object
                (
                )

            [user] => SimpleXMLElement Object
                (
                    [id] => 90034095
                    [name] => username
                    [screen_name] => username
                    [location] => Netherlands
                    [description] => SimpleXMLElement Object
                        (
                        )

                    [profile_image_url] => http://a3.twimg.com/profile_images/543149/screenshot_normal.jpg
                    [url] => SimpleXMLElement Object
                        (
                        )

                    [protected] => false
                    [followers_count] => 1
                    [profile_background_color] => C0DEED
                    [profile_text_color] => 333333
                    [profile_link_color] => 0084B4
                    [profile_sidebar_fill_color] => DDEEF6
                    [profile_sidebar_border_color] => C0DEED
                    [friends_count] => 0
                    [created_at] => Sat Nov 14 22:21:11 +0000 2009
                    [favourites_count] => 0
                    [utc_offset] => 3600
                    [time_zone] => Amsterdam
                    [profile_background_image_url] => http://a3.twimg.com/profile_background_images/55967/wrapper_content_top.jpg
                    [profile_background_tile] => false
                    [statuses_count] => 4
                    [notifications] => false
                    [geo_enabled] => false
                    [verified] => false
                    [following] => false
                )

            [geo] => SimpleXMLElement Object
                (
                )

        )

)

[ Voor 82% gewijzigd door AtlonXP1800 op 02-12-2009 19:19 ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

Dat kan wel kloppen, ik zie immers een wraparound van 6 miljard naar 2 miljard (4 miljard verschil --> 2^32). Volgens mij heeft php geen native long ondersteuning. Verder is het geen 0, maar zit de waarde van je id op index (key) 0 van je array.

Dat moet toch kunnen door het dubbele array uit te lezen?

Wat wil je nu precies uitlezen uit je tweets?

[ Voor 47% gewijzigd door Matis op 02-12-2009 19:25 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Matis schreef op woensdag 02 december 2009 @ 19:21:
Dat kan wel kloppen, ik zie immers een wraparound van 6 miljard naar 2 miljard (4 miljard verschil --> 2^32). Volgens mij heeft php geen native long ondersteuning. Verder is het geen 0, maar zit de waarde van je id op index 0 van je array.
ah! volgens mij sla je de hamer op z'n kop :)
Als ik hem cast naar een string krijg ik wel de juiste waarde.

Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
[b][message=33032748,noline]. Verder is het geen 0, maar zit de waarde van je id op index (key) 0 van je array.

Dat moet toch kunnen door het dubbele array uit te lezen?

Wat wil je nu precies uitlezen uit je tweets?
Het is geen array, het is echt een object (dat ook geen arrayAcces implementeerd). Ik wil het id van de tweet terug krijgen, zodat ik later de tweet ook weer kan verwijderen zonder naar twitter te gaan.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

AtlonXP1800 schreef op woensdag 02 december 2009 @ 19:26:
[...]


Het is geen array, het is echt een object (dat ook geen arrayAcces implementeerd). Ik wil het id van de tweet terug krijgen, zodat ik later de tweet ook weer kan verwijderen zonder naar twitter te gaan.
Ja, dat kan toch middels de $response->id getter. Je refereert naar het object en wil uit het object (verkapte struct) de waarde halen die op de key/index genaamd id zit. Dit is gewoon OO-programmeren hoor :P

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Je hebt helemaal gelijk. Ik schrijf de variable uiteindelijk weg in een database, het veld waar ik daar de waarde in opsloeg was van het type int, en daar kreeg ik dus ook een foute waarde, doordat deze naar een int gecast werd.

Ik heb het veld in de db aangepast, als ik nu gewoon $response->id naar de db stuur gaat het helemaal goed.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

In je database zou je eventueel dat veld als type BIGINT meegegeven. Dan zou alles naar behoren moeten werken ;)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Die print_r is ook fout. Die functie gebruik je voor het weergeven van een array. Als je daar een normale waarde in stopt, dan maakt hij daar blijkbaar een array van waar element 0 je waarde heeft.

Acties:
  • 0 Henk 'm!

  • Tarilo
  • Registratie: December 2007
  • Laatst online: 18-09 16:54
print_r print gewoon de variabele als het geen array is hoor.

Voer dit maar eens uit:
PHP:
1
2
3
4
5
$var = 'Hello';
print_r($var);

$arr = array('foo' => 'bar', 'far' => 'boo');
print_r($arr);

Krijg je gewoon hello uit de eerste en een mooie array uit de tweede

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Ah, ik zie het. Het ligt gewoon aan dat SimpleXMLElement:

PHP:
1
2
3
$xml = new SimpleXMLElement('<a>100</a>');
print_r($xml);
echo $xml;


Resultaat:

code:
1
2
3
4
5
SimpleXMLElement Object
(
    [0] => 100
)
100

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Zal wellicht een __toString() magic method zijn van SimpleXMLElement dan...
Pagina: 1