2016-06-12 16 views
0

Object Iteration mit foreach ist einfach:Objekt Iteration für Schleife

foreach ($item->attributes as $attribute) { 
// echo $attribute->name; 
} 

.. aber ich frage mich, ob ihr möglich, das gleiche mit for stattdessen zu tun:

for ($j=0; $j < count($item->attributes); $j++) { 
// echo $item->attributes->$j->$name ? 
} 

Obwohl ich ein erstellen counter outside foreach und inkrementiere es, aber wollte nur wissen, ob für Werke für Objekte.

Als Referenz, die Objekte, mit denen ich arbeite, sieht wie this aus.

+0

Ja, es wird funktionieren, aber warum nicht einfach selbst ausprobieren? – rjdown

+0

http://php.net/manual/en/language.oop5.iterations.php – rjdown

+0

von Pastebin, Childs von 'galleryInfoContainer' hat private Zugriffsbezeichner, auf die Sie außerhalb der Klasse nicht zugreifen können. –

Antwort

1

for Schleifen arbeitet für Arrays, die erhöht haben oder numerischen Index verringert, und für assoziative Arrays Sie haben foreach zu verwenden, wenn Sie separate Arrays von Schlüsseln haben, zum Beispiel:

$count = count($keys); 
for($i=0; $i < $count; $i++) { 
    echo $arr[$keys[$i]]; 
} 

oder Sie können Ihre assocative indizieren Arrays, array_values

$arr = array_values($assoc_array); 
$count = count($arr); 
for($i=0; $i < $count; $i++) { 
    echo $arr[$i]; 
} 

für Objekte verwenden, sie sind Eigenschaften, die aus Zahlen kann nicht gestartet werden, daher müssen Sie Ihr Objekt Array und reindex Schlüssel konvertieren.

$arr = array_values(json_decode(json_encode($object), true)); 
$count = count($arr); 
for($i=0; $i < $count; $i++) { 
    echo $arr[$i]; 
} 

try oben zu vermeiden und foreach stattdessen verwenden.

+0

Aha, genau das, was ich wissen wollte. Vielen Dank! – 3zzy

+0

@ 3zzy Sie sind willkommen :) –

+1

Warum sammeln wir nicht zuerst 'count()' und speichern es in einer Variablen, so dass wir es nicht bei jeder Iteration aufrufen? 'für ($ i = 0, $ c = count ($ keys); ...)' – dbf

-1
for ($j=0; $j < count((array)$item->attributes); $j++) { 
    echo $item->attributes[$j]; 
} 

Ist das was du meinst? Sie greifen direkt auf dieses Objekt zu, genauso wie oben, und Sie werfen es vorher zum Zählen aus.

+0

Warum werfen Sie $ item-> Attribute auf ein Array? Wenn es nicht bereits ein Array ist, wird es nicht magisch zu einem werden. – rjdown

+0

Vielleicht funktioniert es mit WoW? Irgendetwas kann magisch passieren da drüben hörte ich ... – dbf

Verwandte Themen