php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.08.2010, 15:32  
Neuer Benutzer
 
Registriert seit: 10.08.2009
Beiträge: 12
PHP-Kenntnisse:
Anfänger
HeckMc befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] foreach - Array vs. Objekt

Hallo zusammen,

ich habe ein komische Problem mit der foreach Schleife.

1. Ausgangspunkt:

Ein Array mit einem Objekt an Index 0:
PHP-Code:
array(1) {
  [
0]=>
  
object(stdClass)#3 (3) {
    
["Id"]=>
    
string(16"Id1363240"
    
["pseudonym"]=>
    
string(9"Tester2p1"
    
["status"]=>
    
string(7"invited"
  
}

Da ich nicht ausschliessen kann, dass in dem Array auch mal mehrere Objekte sind gehe ich mit foreach durch das Array:

foreach ($members as $member)

Danach ist in $member folgendes:
PHP-Code:
array(3) {
  [
"Id"]=>
  
string(16"Id1363240"
  
["pseudonym"]=>
  
string(9"Tester2p1"
  
["status"]=>
  
string(7"invited"

2. Ausgangspunkt, der Member antwortet:

Wieder ein Array mit Objekt an Index 0:
PHP-Code:
array(1) {
  [
0]=>
  
object(stdClass)#3 (3) {
    
["Id"]=>
    
string(16"Id1363240"
    
["pseudonym"]=>
    
string(9"Tester2p1"
    
["status"]=>
    
string(8"accepted"
  
}

Wieder mit foreach bearbeitet:
foreach ($members as $member) steht in $member aber:
PHP-Code:
object(stdClass)#3 (3) {
  
["Id"]=>
  
string(16"Id1363240"
  
["pseudonym"]=>
  
string(9"Tester2p1"
  
["status"]=>
  
string(8"accepted"


Warum hab ich beim ersten mal ein Array und beim zweiten mal ein Objekt? Kann mir bitte jemand einen Hinweis geben, wo ich weitere Informationen dazu finde, wie foreach mit den übergebenen Arrays und Objekten umgeht?

Vielen Dank und viele Grüße
HeckMc

Geändert von HeckMc (25.08.2010 um 15:57 Uhr). Grund: PS: editiert da ich hier sehr nett um Überarbeitung gebeten worden bin....
HeckMc ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.08.2010, 16:15  
Erfahrener Benutzer
 
Registriert seit: 17.08.2010
Beiträge: 216
PHP-Kenntnisse:
Fortgeschritten
Dormilich befindet sich auf einem aufstrebenden Ast
Standard

die erste Ausgabe kann ich gar nicht nachvollziehen, die danach schon.
2. Ausgabe: du hast ein array, das ein objekt enthält, durch foreach() bekommst du
3. Ausgabe: das objekt

es ist natürlich möglich, sich mit foreach() durch die öffentlichen properties eines Objekts zu bewegen …
Dormilich ist offline  
Alt 25.08.2010, 16:18  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Das kann man nicht pauschal beantworten. Wenn Du in der Schleife bspw. Operationen auf die Daten vornimmst (wovon ich mal ausgehe), änderst Du vielleicht den Typ. foreach alleine hat damit nichts zu tun, es arbeitet ohnehin auf Kopien von Arrays.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 25.08.2010, 16:19  
Neuer Benutzer
 
Registriert seit: 10.08.2009
Beiträge: 12
PHP-Kenntnisse:
Anfänger
HeckMc befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

so geht es mir auch. Allerdings habe ich den Quellcode komplett abgesucht und $members wird sowohl im ersten als auch im zweiten Fall for foreach nicht verwendet.

Viele Grüße
HeckMc
HeckMc ist offline  
Alt 25.08.2010, 16:25  
Neuer Benutzer
 
Registriert seit: 10.08.2009
Beiträge: 12
PHP-Kenntnisse:
Anfänger
HeckMc befindet sich auf einem aufstrebenden Ast
Standard

Hallo nochmal,

also die erste foreach Schleife sieht wie folgt aus:

PHP-Code:
foreach ($members as $member)
                {
                    
logTraces (__FUNCTION__'Members will be notified'$member);
                    
                    
//notifi invited users
                    
                    
$notifiresponse notifiInvitation($member['Id'],$scid,$member$attributes$adminId);
 
                    if (
$notifiresponse->status =='200')
                    {
                        
logTraces (__FUNCTION__'Successful Response to nofitication received'$notifiresponse);
                        
                        if (
$notifiresponse->memberStatus == 'accepted'
                        {
                            
$response ScAcceptInvitation($requester$scid$member$attributes);
                        }
                        elseif (
$notifiresponse->memberStatus == 'refused'
                        {
                            
$response ScRefuseInvitation($requester$notifiresponse$scid$member);
                        }
                    } 
Im zweiten Fall sieht es so aus:
PHP-Code:
foreach ($members as $member)
        {
            
logTraces (__FUNCTION__'This is the member Parameter:'$member);
            
            
$response ScAcceptInvitation($requester$scid$member$attributes);
        } 
Wie man sieht ist for dem log nichts mit $member geschehen und wie gesagt wie $members vom Aufruf bis zur foreach Schleife auch nicht angerührt.

edit:
Das Problem ist halt, dass ich beides mal ScAcceptInvitation ausführen möchte und es natürlich geschickt wäre, wenn der Zugriff auf die in $member enthaltenen "Parameter" beides mal gleich abläuft.
Viele Grüße
HeckMc

Geändert von HeckMc (25.08.2010 um 16:30 Uhr).
HeckMc ist offline  
Alt 25.08.2010, 16:29  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Was passiert denn mit $response?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 25.08.2010, 16:31  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Ich vermute mal, das PHP aus einem StdClass-Object ein Array macht an der Stelle wo du es wie ein Array benutzt:

PHP-Code:
$member['Id'
cycap ist offline  
Alt 25.08.2010, 16:33  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Schon richtig. Im Prinzip wird das aber nicht zurückgeschrieben, wenn man nicht as $key => & $value verwendet. Auch wenn Objekte als Referenz zuryckgegeben werden handelt es sich ja nicht um Variablenreferenzen. Sonst müßte:

Zitat:
PHP-Code:
$foo = new Foo;
var_dump ((array) $foo); 
$foo ja hier auch hinterher ein Array sein. Was ich zu bezweiflen wage.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 25.08.2010, 16:36  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Er sprach ja auch nicht davon das $members[0] ein Array ist, sondern $member
cycap ist offline  
Alt 25.08.2010, 16:38  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ändert aber nichts an der Aussage.

$foo[0] erzeugt vielleicht ein Array für diesen Ausdruck. Aber schreibt es den auch zurück nach $foo? foreach ($object) macht die Variable ja auch nicht zum Array, sondern nur eine Kopie des Wertes im Ausdruck des each-Kontext.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] foreach mit Mehrdimensionalen Arrays Registrierer PHP Tipps 2009 11 15.07.2009 19:14
[Erledigt] Problem beim Warenkorb füllen array,array_push und foreach! litterauspirna PHP Tipps 2008 8 19.08.2008 15:11
[Erledigt] foreach liefert Invalid argument supplied for foreach() fehler! litterauspirna PHP Tipps 2008 8 11.08.2008 11:22
foreach verändert die werte des arrays das durchlaufen wird Crypi PHP Tipps 2007 5 10.01.2007 08:24
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
durch foreach auch normalen String durchlaufen lassen PHP Tipps 2006 7 14.01.2006 13:20
Problem mit Suchscript PHP Tipps 2007 5 28.12.2005 17:12
Mehrere Dateien uploaden (foreach Problem) pixelcut PHP-Fortgeschrittene 3 09.11.2005 17:34
wird der array überschrieben? foreach problem c-bass PHP Tipps 2005-2 7 15.08.2005 13:19
for / foreach problem PHP-Fortgeschrittene 4 19.11.2004 16:58
foreach problem -> mit SQL abfrage PHP Tipps 2004 3 14.09.2004 10:10
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php foreach object, php foreach array, object array, object to array, php foreach objekte, php object to array, php array foreach, php array objekte, foreach array php, php object foreach, foreach object php, php foreach objekt, php objekt foreach, php array vs object, php array in objekt, foreach php array, array php foreach, foreach array in array, object in array, ist ein array ein objekt

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum