PHP Verständnisfrage zu Objekten und Arrays (gelöst)

Observer

Well-known member
ID: 351549
L
29 Mai 2009
260
20
Hi, ich habe folgendes Problem.

Code:
object(stdClass)#3 (5) {["HasError"]=>bool(false)["ErrorMsg"]=>string(0) ""["NumRecords"]=>int(5)["NumRecordsTotal"]=>string(1) "5"["Records"]=>array(5) {[0]=>array(34) { ["testname"]=>string(5) "Klamm"
Ich habe diese Ausgabe bei einem WSDL teil.

Nun müsste ich in einer foreach diese (34) werte aus dem letzten Array bekommen das ja wiederum davor in einem array (5) steckt.
Also mehrdimensionaler zugriff darauf.
Da happerts aber jetzt bei mir irgendwie.
Kann mir jemand diese Objekt und Arrayzugriffe bitte mal für normalsterbliche erläutern ?
Habe schon mehrere Tuts gelesen, aber irgendwie steh ich da derzeit mächtig auf dem schlauch.
mach ich das in dieser variante :
Code:
foreach($a as $b){
  foreach($b as $c){
   var_dump($c);
 }
}
Dann bekomme ich ne Warnung, mache ich das in einer einfachen foreach geht es auch nicht, denn da bekomme ich immer nur den ersten wert des letzten Arrays.
IRgendwie ist es wie zugenagelt gerade.

Vielen dank für eure Tipps im voraus schonmal.

MfG
 
Zuletzt bearbeitet:
Du solltest einfach nur

var_dump( $resource );

benutzen, wobei $resource eine mehrdimensionale Struktur sein kann oder einfach nur eine Variable.

Dieser Befehl gibt von dem Ursprungsobjekt alle Unterobjekte mit deren Unterobjekten aus (rekursiv).
Um die Ausgabe ansprechender, besser gesagt, leserlich zu haben, einfach ein

echo "<pre>";

davor setzen. Soviel um erstmal die Struktur des gesamten mehrdimensionalen Objekts kennenzulernen.

Wie Du dann auf die einzelnen Objekte zugreifst, geb ich Dir ein Beispiel:

Code:
object(stdClass)#3 (5) {
  ["HasError"] => bool(false)
  ["ErrorMsg"] => string(0)""
  ["NumRecords"] => int(5)
  ["NumRecordsTotal"] => string(1) "5"
  ["Records"] => array(5) {
    [0]=>array(34) { 
      ["testname"] => string(5) "Klamm"
      ...
    }
  }
}

Mit

echo stdClass=>Records[0]=>testname;

sollte dann "Klamm" bei der Ausgabe erscheinen.
 
Hi erstmal danke für die Antwort.
Dass var_dump($ressource); hatte ich ja gemacht, da kommt ja die ausgabe von oben her.
Also das hier
Code:
object(stdClass)#3 (5) {
  ["HasError"] => bool(false)
  ["ErrorMsg"] => string(0)""
  ["NumRecords"] => int(5)
  ["NumRecordsTotal"] => string(1) "5"
  ["Records"] => array(5) {
    [0]=>array(34) { 
      ["testname"] => string(5) "Klamm"
      ...
    }
  }
}
So nur mein Problem ist ja jetzt folgendes.
["testname"]=>string(5) "Klamm"
Davon gibt es jetzt 5 stück.
Klamm
Bild
Spiegel
Stern
Focus
Zu erkennen an diesem Array ["Records"] => array(5) {
Das sind die 5 datensätze Praktisch.
In diesem Array [0]=>array(34) {
Sind nun 34 Werte die ich benötige und das eben 5x im moment.
Sind aber mehr in der db wird automatisch ja auch das Array davor erhöht.
Wobei sich die 34 werte ja nie ändern sondern nur die Anzahl des davorliegenden Array.
Also ich kenne das von Mehrdimensionalen Array ja so wie ich es schon oben schrieb, zugriff darauf über das erste Array das den Counter darstellt und dann auf das zweite array.
Wo ich ja mit foreach auch wieder alle 34 werte durchgehen kann.
Wie gesagt, dort liegt mein Problem :(
Also im Zugriff über diese Objekte auf das Mehrdimensionale Array.
Ich kenne mich mit Objekten momentan noch nicht so gut aus, da bin ich noch am lernen.
Sorry
MfG
 
-> wird bei PHP benutzt, also:
PHP:
echo $class->Records[0]->testname;

Also nochmal danke für eure Geduld !

So zum eigentlichen, egal wie ich es da jetzt versuche, da bekomme ich keine Informationen heraus.
Auch mit dem Echo von chrissel nicht.
Da bleibt die Ausgabe leer.
Wobei ich eben denke ich sollte da dann eine Ausgabe von eben diesen 5 Datensätzen mit den 34 werten bekommen.
Ok, bei dem Bsp. da jetzt eben sollte ich die in der Reihenfolge angezeigt bekommen :
Klamm
Stern
Focus
Bild
Spiegel

Aber nischt.
Da ich ja in dem Foreach nur den namen abfrage, ohne foreach sollte ich zumindest mal Klamm zu sehen bekommen da es ja dann nur den ersten DS nimmt.

Ich versteh es nicht :(

Aber ich danke euch für eure Hilfe.

MfG
 
$variable = array();
$variable = stdClass->Records[x];

Das x steht für 0-4, weil Du 5 Möglichekeiten zur Auswahl hast.

PHP:
foreach ( $variable as $entry ) {
  echo $entry."\n";
}

oder

PHP:
foreach ( $variable as $key=>$val ) {
  echo "Key : ".$key." mit Wert ".$val."\n";
}

Ein var_dump() ist kein echo, sondern eine totale Ausgabe.
Deshalb gibt es auch den Error.
Ein Array ist auch ein Objekt. Alles sind Objekte, aber der Typ unterscheidet sie ( Int, Array, String, Resource, ... ).
 
Zuletzt bearbeitet:
Ja, danke tobomator.
Das mit var_dump ist mir klar, damit schaue ich nur nach was für datentypen in den werten stecken.

Hab mal das gemacht was du unten geschrieben hast also mir das Array einfach mal ausgeben lassen.

Ergebnis : Key : HasError mit Wert Key : ErrorMsg mit Wert Key : NumRecords mit Wert 5 Key : NumRecordsTotal mit Wert 5 Key : Records mit Wert Array

Jetzt nimmt er wie ich es ja bereits sagte die erste Dimension (Array) des Mehrdimensionalen.
Ich muss aber an die werte der 2ten Dimension.

Ich muss an die Werte die hier drinne sind => Key : Records mit Wert Array
Das ist ja wieder ein Array.
Aber irgendwie bin ich wie gesagt zu doof da ran zu kommen.
Ich geb mal den Code raus mit dem ich mich hier rumschlage.

Code:
define ("WSDL_SERVER",
"https://feeds.localhost/Feed.php?wsdl");
$oSmartFeed= new SoapClient(WSDL_SERVER);
$oSessionHash= $oSmartFeed->login('meinlogin', 'meinPasswort');
if(!$oSessionHash->HasError){
$sSessionHash= $oSessionHash->Records['sessionHash'];
$aConfig= array('limit'=>5, 'offset'=>2);
$aResult= $oSmartFeed-> getWebData ($sSessionHash, $aConfig);

foreach ( $aResult as $key=>$val ) {
  echo "Key : ".$key." mit Wert ".$val."\n";
   }
}

Irgendwie will das nicht so wie es soll.
Vielleicht ist es so besser für euch ersichtlich.

Danke im voraus.

MfG

Edit //
Ok, danke euch für eure Hinweise.
Habe mir das bsp. von tobo zu herzen genommen und es folgendermasen gelöst.

Code:
$data = $aResult->Records;

foreach ( $data as $key=>$val ) {
  echo "Key : ".$key." mit Wert ".$val."\n";
	foreach ( $val as $key1=>$val1 ) {
  		echo "Key : ".$key1." mit Wert ".$val1."\n";
		}
	}
So bekomme ich die daten die ich brauche.

Also nochmals Danke an alle für eure Mithilfe.

MfG
 
Zuletzt bearbeitet: