foreach aus SimpleXMLElement Object
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
beispiel
code
dank
datum
gewinnspiel
http
item
kopieren
logik
mai
null
objekt
quelle
re
staffel
starten
test
url
urlaub
-
Hallo
ich lese 4 verschiedenen RSS-Feeds auf einmal ein
$quellen = array(); // je item im $quellen Array eine URL zu einem RSS Feed $i=0; foreach($quellen as $qdata) { $resobj[$i] = simplexml_load_file($qdata); $i++; }
soweit ok: print_r($resob) lefert die 4 Arrays mit jeweils dem SimpleXMLElement Object aus der rss
die Struktur ist folgendermasen (hier BSP mit nur Daten aus 2 RSS Feeds und je 2 Items ohne Inhalte)
Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [version] => 2.0 ) [channel] => SimpleXMLElement Object ( [title] => ... [link] => ... [description] => ... [language] => ... [ttl] => ... [item] => Array ( [0] => SimpleXMLElement Object ( [title] => ... [description] => ... [pubDate] => ... [guid] => ... [link] => ... ) [1] => SimpleXMLElement Object ( [title] => ... [description] => ... [pubDate] => ... [guid] => ... [link] => ... ) ) ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [version] => 2.0 ) [channel] => SimpleXMLElement Object ( [title] => ... [link] => ... [description] => ... [language] => ... [ttl] => ... [item] => Array ( [0] => SimpleXMLElement Object ( [title] => ... [description] => ... [pubDate] => ... [guid] => ... [link] => ... ) [1] => SimpleXMLElement Object ( [title] => ... [description] => ... [pubDate] => ... [guid] => ... [link] => ... ) ) ) ) }
jetzt will ich je rss-feed nur den Inhalt vom item Objekt haben
also etwa so:
$itemdata[0] = $resobj[0]->channel->item;
$itemdata[1] = $resobj[1]->channel->item;
usw.
aber das klappt dann nicht: mit foreach ?!?!???
$k=0; foreach($resobj as $data) { $itemdata[$k] = array(); $itemdata[$k] = $data->channel->item; $k++; } echo "<pre>\r\n"; print_r($itemdata); echo "</pre>\r\n";
so bekomme ich jeweils nur das erste item je RSS, nicht alle items je RSS
aber item ist doch oben ein Array, warum kommt es nicht in $itemdata an, sondern nur das 1. Element?
was ist falsch, wo ist der denkfehler?
... ich kapier's nicht, müsste doch gehen ?
direkter Zugriff auf das item Objekt (welches sich im channel Objekt befindet) oder ?
Danke!
EDIT:
habe es doch hinbekommen
$k=0; foreach($response1_obj as $data) { foreach($data->channel->item as $idata) { $iteminfo[$k][] = $idata; } $k++; }
so gehts,
wundert mich aber, warum ich nicht direkt das Array einer neuen Variable zuweisen kann ?!
sondern das item Array nochmal durchlaufen muss ?!?!
Beitrag zuletzt geändert: 28.9.2011 13:18:36 von tengames -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
tengames schrieb:
musst du nicht:
wundert mich aber, warum ich nicht direkt das Array einer neuen Variable zuweisen kann ?!
sondern das item Array nochmal durchlaufen muss ?!?!
zum vergleich - dazu erzeuge ich die daten so, weil ich deine xmls ja nicht habe:$res = null; $i = 0; foreach($resobj->channel->item as $item) { $res[$i] = $item; $i++; } // test output echo '<pre>' . print_r($res,true) . '</pre>';
die testausgabe sieht dann so aus:<?php // imitate xml-structur with classes class CItem { public $title = 'item title'; public $description = 'description'; public $pubDate = 'pubDate'; public $guid = 'guid'; public $link = 'link'; } class CChannel { public $title = 'channel title'; public $link = 'link'; public $description = 'description'; public $language = 'de'; public $ttl = 'ttl'; public $item = null; public function __construct() { $this->item[] = new CItem(); $this->item[] = new CItem(); $this->item[] = new CItem(); } } class CXml { public $attributes = array('version' => '2.0'); public $channel = null; public function __construct() { $this->channel = new CChannel(); } // test only public function __toString() { return '<pre>' . print_r($this,true) . '</pre>'; } } $resobj = new CXml(); // next line for test only #echo $resobj;
Array ( [0] => CItem Object ( [title] => item title [description] => description [pubDate] => pubDate [guid] => guid [link] => link ) [1] => CItem Object ( [title] => item title [description] => description [pubDate] => pubDate [guid] => guid [link] => link ) [2] => CItem Object ( [title] => item title [description] => description [pubDate] => pubDate [guid] => guid [link] => link ) )
-
hemiolos schrieb:
musst du nicht:
$res = null; $i = 0; foreach($resobj->channel->item as $item) { $res[$i] = $item; $i++; } // test output echo '<pre>' . print_r($res,true) . '</pre>';
nö, damit bekomme ich: Warning: Invalid argument supplied for foreach() ....
denke mal weil ja jeder channel (je RSS feed) erst noch in einem Array steckt
Hier nochmal mit Beispiel-Daten zum testen: (Twitter nur als Beispiel-Daten)
$quellen = array(); $quellen[0] = 'http://twitter.com/statuses/user_timeline/limacity.rss?count=4'; $quellen[1] = 'http://twitter.com/statuses/user_timeline/Dirk_Bach.rss?count=4'; $quellen[2] = 'http://twitter.com/statuses/user_timeline/IngolfLueck.rss?count=4'; $quellen[3] = 'http://twitter.com/statuses/user_timeline/Oliver_Pocher.rss?count=4'; $i=0; foreach($quellen as $qdata) { $resobj[$i] = simplexml_load_file($qdata); $i++; } echo "<pre>\r\n"; print_r($resobj); echo "</pre>\r\n";
damit klappt es, nur die RSS-Items in ein Array zu packen:
$k=0; foreach($resobj as $data) { foreach($data->channel->item as $idata) { $iteminfo[$k][] = $idata; } $k++; } echo "<pre>\r\n"; print_r($iteminfo); echo "</pre>\r\n";
Ergebnis sieht dann so aus (so will / brauche ich es dann auch)
Array ( [0] => Array ( [0] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [1] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [2] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [3] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) ) [1] => Array ( [0] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [1] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [2] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [3] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) ) [2] => Array ( [0] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [1] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [2] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [3] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) ) [3] => Array ( [0] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [1] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [2] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [3] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) ) )
ABER ... und hier kommt mein Problem !!!!
---> ? komisch finde ich immernoch, warum ich mit folgendem jeweils nur das erste Item je Feed bekomme
foreach($resobj as $data) { $iteminfo1[] = $data->channel->item; }
Das Ergebnis ist je nur das erste Item je RSS Feed: also direkt das erste Object aus dem item-Array ???
Array ( [0] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [1] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [2] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) [3] => SimpleXMLElement Object ( [title] => .... [description] => .... [pubDate] => .... [guid] => .... [link] => .... ) )
weil in den Ausgangs-Daten $resobj ist das Object [item] ja jeweils ein Array
also sollte man mit $data->channel->item einer Variable dieses Array zuweisen können? oder?
ist für mich absolut unlogisch, dass dabei dann je nur das erste Array-Elemet raus kommt, und nicht das ganze item Array
logisch wäre es mit $data->channel->item[0] dass nur das erste Element raus kommt,
aber ähhhhhmmm .... was ist hier eigentlich los? .... ich verzweifel an dieser Logik !!!
HELP !!! .. Danke!
-
tengames schrieb:
ist das so jetzt richtig?:
... ich verzweifel an dieser Logik
die ausgabe ist:<?php $quellen = array(); $quellen[0] = 'http://twitter.com/statuses/user_timeline/limacity.rss?count=4'; $quellen[1] = 'http://twitter.com/statuses/user_timeline/Dirk_Bach.rss?count=4'; $quellen[2] = 'http://twitter.com/statuses/user_timeline/IngolfLueck.rss?count=4'; $quellen[3] = 'http://twitter.com/statuses/user_timeline/Oliver_Pocher.rss?count=4'; $res = null; foreach($quellen as $data) { $resobj[] = simplexml_load_file($data); } foreach($resobj as $obj) { $item = $obj->channel->item; $aitem = explode(':', $item->title); foreach($item as $chitem) { $res[reset($aitem)][] = $chitem; } } exit('<pre>'.print_r($res,true));
dein fehler war - wie du sehen kannst - dass du alle daten in den selben index geschrieben hast.Array ( [limacity] => Array ( [0] => SimpleXMLElement Object ( [title] => limacity: Bei unserem 4. Gewinnspiel bis 25.12. müsst ihr nur ein paar Dinge erraten, und könnt so ganz einfach eure Gratis-Wunschdomain gewinnen! [description] => limacity: Bei unserem 4. Gewinnspiel bis 25.12. müsst ihr nur ein paar Dinge erraten, und könnt so ganz einfach eure Gratis-Wunschdomain gewinnen! [pubDate] => Wed, 22 Dec 2010 18:02:27 +0000 [guid] => http://twitter.com/limacity/statuses/17641126873800704 [link] => http://twitter.com/limacity/statuses/17641126873800704 ) [1] => SimpleXMLElement Object ( [title] => limacity: RT @netzpolitik: Kopieren erwünscht: Musikpiraten veröffentlichen gemeinfreie Notenblätter für Advents- und Weihnachtslieder. http://bit ... [description] => limacity: RT @netzpolitik: Kopieren erwünscht: Musikpiraten veröffentlichen gemeinfreie Notenblätter für Advents- und Weihnachtslieder. http://bit ... [pubDate] => Mon, 13 Dec 2010 20:11:21 +0000 [guid] => http://twitter.com/limacity/statuses/14412076336291840 [link] => http://twitter.com/limacity/statuses/14412076336291840 ) [2] => SimpleXMLElement Object ( [title] => limacity: Die Gewinner des 2. Gewinnspiels haben wir gerade im Forum veröffentlicht, Glückwunsch! Du willst auch eine gratis .de-Domain? Mach mit! [description] => limacity: Die Gewinner des 2. Gewinnspiels haben wir gerade im Forum veröffentlicht, Glückwunsch! Du willst auch eine gratis .de-Domain? Mach mit! [pubDate] => Mon, 13 Dec 2010 20:10:29 +0000 [guid] => http://twitter.com/limacity/statuses/14411858911952896 [link] => http://twitter.com/limacity/statuses/14411858911952896 ) [3] => SimpleXMLElement Object ( [title] => limacity: Gestern ging unser 1. Gewinnspiel zu Ende, aber die nächste Aufgabe wartet bereits auf dich, als Preise gibt es zum Beispiel Gratis-Domains! [description] => limacity: Gestern ging unser 1. Gewinnspiel zu Ende, aber die nächste Aufgabe wartet bereits auf dich, als Preise gibt es zum Beispiel Gratis-Domains! [pubDate] => Sun, 05 Dec 2010 14:50:39 +0000 [guid] => http://twitter.com/limacity/statuses/11432268379725825 [link] => http://twitter.com/limacity/statuses/11432268379725825 ) ) [Dirk_Bach] => Array ( [0] => SimpleXMLElement Object ( [title] => Dirk_Bach: Juhu die 1000 geknackt! Vielen Dank für´s followen trotz meiner wenigen Tweets.Ich verspreche aberdass ich im Urlaub diese nachhole. [description] => Dirk_Bach: Juhu die 1000 geknackt! Vielen Dank für´s followen trotz meiner wenigen Tweets.Ich verspreche aberdass ich im Urlaub diese nachhole. [pubDate] => Thu, 02 Jul 2009 13:51:06 +0000 [guid] => http://twitter.com/Dirk_Bach/statuses/2437037775 [link] => http://twitter.com/Dirk_Bach/statuses/2437037775 ) [1] => SimpleXMLElement Object ( [title] => Dirk_Bach: Ich glaube ich bräuchte dringend einmal Urlaub um zu twittern! [description] => Dirk_Bach: Ich glaube ich bräuchte dringend einmal Urlaub um zu twittern! [pubDate] => Tue, 09 Jun 2009 14:22:51 +0000 [guid] => http://twitter.com/Dirk_Bach/statuses/2089876568 [link] => http://twitter.com/Dirk_Bach/statuses/2089876568 ) [2] => SimpleXMLElement Object ( [title] => Dirk_Bach: heute abend nicht vergessen- 21.45Uhr Sat1 und danach gleich mit meinen dreisten Drei auch gleich noch ablachen. [description] => Dirk_Bach: heute abend nicht vergessen- 21.45Uhr Sat1 und danach gleich mit meinen dreisten Drei auch gleich noch ablachen. [pubDate] => Fri, 29 May 2009 15:49:17 +0000 [guid] => http://twitter.com/Dirk_Bach/statuses/1960992558 [link] => http://twitter.com/Dirk_Bach/statuses/1960992558 ) [3] => SimpleXMLElement Object ( [title] => Dirk_Bach: danke danke für die vielen lieben Grüße, ich bemühe mich alle schnellstmöglich zu beantworten und hoffe das ich tgl. Zeit finde zu twittern [description] => Dirk_Bach: danke danke für die vielen lieben Grüße, ich bemühe mich alle schnellstmöglich zu beantworten und hoffe das ich tgl. Zeit finde zu twittern [pubDate] => Tue, 26 May 2009 15:58:26 +0000 [guid] => http://twitter.com/Dirk_Bach/statuses/1924827668 [link] => http://twitter.com/Dirk_Bach/statuses/1924827668 ) ) [IngolfLueck] => Array ( [0] => SimpleXMLElement Object ( [title] => IngolfLueck: Yepp! Arminia Bielefeld erhält Lizenz für den bezahlten Fussball! Ab sofort arbeiten wir am direkten Wiederaufstieg. Nie mehr 3. Liga [description] => IngolfLueck: Yepp! Arminia Bielefeld erhält Lizenz für den bezahlten Fussball! Ab sofort arbeiten wir am direkten Wiederaufstieg. Nie mehr 3. Liga [pubDate] => Wed, 15 Jun 2011 09:45:16 +0000 [guid] => http://twitter.com/IngolfLueck/statuses/80933883973079040 [link] => http://twitter.com/IngolfLueck/statuses/80933883973079040 ) [1] => SimpleXMLElement Object ( [title] => IngolfLueck: Heute kommt die Wochenshow zurück. Sat 1 22.15h. Würde mich freuen, sogar sehr. [description] => IngolfLueck: Heute kommt die Wochenshow zurück. Sat 1 22.15h. Würde mich freuen, sogar sehr. [pubDate] => Fri, 20 May 2011 16:39:23 +0000 [guid] => http://twitter.com/IngolfLueck/statuses/71616017884917760 [link] => http://twitter.com/IngolfLueck/statuses/71616017884917760 ) [2] => SimpleXMLElement Object ( [title] => IngolfLueck: RT @medienkuh: Der Pfand-Freitag... RT @IngolfLueck: wir starten im Mai mit einer neues Staffel der guten WOCHENSHOW in Sat 1, Freitags ... [description] => IngolfLueck: RT @medienkuh: Der Pfand-Freitag... RT @IngolfLueck: wir starten im Mai mit einer neues Staffel der guten WOCHENSHOW in Sat 1, Freitags ... [pubDate] => Mon, 28 Mar 2011 15:37:15 +0000 [guid] => http://twitter.com/IngolfLueck/statuses/52393821329293312 [link] => http://twitter.com/IngolfLueck/statuses/52393821329293312 ) [3] => SimpleXMLElement Object ( [title] => IngolfLueck: Nu isses soweit, wir starten im Mai mit einer neues Staffel der guten WOCHENSHOW in Sat 1, Freitags ab 22.20h dann bitte nix mehr vornehmen [description] => IngolfLueck: Nu isses soweit, wir starten im Mai mit einer neues Staffel der guten WOCHENSHOW in Sat 1, Freitags ab 22.20h dann bitte nix mehr vornehmen [pubDate] => Sun, 27 Mar 2011 14:14:16 +0000 [guid] => http://twitter.com/IngolfLueck/statuses/52010551605346304 [link] => http://twitter.com/IngolfLueck/statuses/52010551605346304 ) ) [Oliver_Pocher] => Array ( [0] => SimpleXMLElement Object ( [title] => Oliver_Pocher: chatroulette ist down, zum Glück gibts ja noch Twitter... [description] => Oliver_Pocher: chatroulette ist down, zum Glück gibts ja noch Twitter... [pubDate] => Tue, 16 Feb 2010 22:05:31 +0000 [guid] => http://twitter.com/Oliver_Pocher/statuses/9204272384 [link] => http://twitter.com/Oliver_Pocher/statuses/9204272384 ) [1] => SimpleXMLElement Object ( [title] => Oliver_Pocher: Habe am Wochenende mit Bekannten was lustiges entdeckt: www.chatroulette.com - aber Vorsicht, einige komische Gestalten! :) #Chat roulette# [description] => Oliver_Pocher: Habe am Wochenende mit Bekannten was lustiges entdeckt: www.chatroulette.com - aber Vorsicht, einige komische Gestalten! :) #Chat roulette# [pubDate] => Tue, 16 Feb 2010 14:06:01 +0000 [guid] => http://twitter.com/Oliver_Pocher/statuses/9185900854 [link] => http://twitter.com/Oliver_Pocher/statuses/9185900854 ) [2] => SimpleXMLElement Object ( [title] => Oliver_Pocher: Euch allen ein Frohes neues Jahr!!! Bin momentan recht eingespannt wegen dem Zuwachs, aber werde wieder öfter twittern. promise! [description] => Oliver_Pocher: Euch allen ein Frohes neues Jahr!!! Bin momentan recht eingespannt wegen dem Zuwachs, aber werde wieder öfter twittern. promise! [pubDate] => Mon, 11 Jan 2010 09:51:16 +0000 [guid] => http://twitter.com/Oliver_Pocher/statuses/7624843484 [link] => http://twitter.com/Oliver_Pocher/statuses/7624843484 ) [3] => SimpleXMLElement Object ( [title] => Oliver_Pocher: Pochers Auftrag. Ihr habt eine Mission für mich, die ich gnadenlos durchziehen muss?! Dann schreibt mir auch www.oliverpocher.de! #Show [description] => Oliver_Pocher: Pochers Auftrag. Ihr habt eine Mission für mich, die ich gnadenlos durchziehen muss?! Dann schreibt mir auch www.oliverpocher.de! #Show [pubDate] => Fri, 23 Oct 2009 11:07:39 +0000 [guid] => http://twitter.com/Oliver_Pocher/statuses/5094172116 [link] => http://twitter.com/Oliver_Pocher/statuses/5094172116 ) ) )
Beitrag zuletzt geändert: 5.10.2011 2:21:31 von hemiolos -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage