2016-06-12 27 views
0
用foreach

對象迭代很簡單:對象重複使用循環

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

..但我不知道是否它可以做同樣的for代替:

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

雖然我可以創造一個反對foreach並增加它,但只是想知道是否適用於對象。

僅供參考,我正在使用的對象看起來像this

+0

是的,它會工作,但爲什麼不自己嘗試呢? – rjdown

+0

來自pastebin的http://php.net/manual/en/language.oop5.iterations.php – rjdown

+0

,'galleryInfoContainer'的孩子有私人訪問標識符,你不能在課堂外訪問它們。 –

回答

1

for環路工程已遞增或遞減數字索引數組和關聯數組,你必須使用的foreach除非你有鑰匙單獨的陣列,例如:

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

,或者你可以重新索引你的assocative陣列,使用array_values

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

的對象,它們的屬性,不能從數字開始,所以你有你的對象轉換爲數組和REINDEX鍵。

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

儘量避免以上的和使用foreach代替。

+0

啊哈,就是我想知道的。謝謝! – 3zzy

+0

@ 3zzy歡迎您:) –

+1

爲什麼我們不首先收集count()並將其存儲在一個變量中,所以我們在每次迭代時都不會調用它? 'for($ i = 0,$ c = count($ keys); ...)' – dbf

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

這是你的意思嗎?您可以像上面那樣直接訪問此對象,並且您可以預先對其進行計算。

+0

爲什麼要將$ item->屬性轉換爲數組?如果它不是一個數組,它不會奇蹟般地變成一個。 – rjdown

+0

也許它適用於WoW?神奇的事情可以發生在那裏我聽到... – dbf