2013-01-04 87 views
-1

可能重複:
Iterating through stdClass obj’s that are contained within a parent stdClass Obj. (aka: iterating through child objects)迭代通過對象的子對象而不使用`foreach`

... bccause如果父對象爲空foreach顯示錯誤信息。 for()將是我的首選循環邏輯,但我不知道如何訪問子對象屬性。

工作上下的代碼:

foreach ($main_object as $object) { 
    $object->value = $object->value * 3.14; 
} 

$main_object爲空或null,foreach轉儲出錯誤。

我正在尋找更多的東西是這樣的:

(僞)代碼:

for ($p = 0; $p < counter($main_object); $p++) { 
    //$p being the index'd id of the child object. That is where I'm having issues, how do I refer to child X within a parent object. 
    $main_object->$p->value = $main_object->$p->value * 3.14; 
} 

現在如果「$ main_object」爲空/空不會引發錯誤,邏輯不斷道路行駛。

當對象是父對象內的一組子對象之一時,如何訪問子對象$x->properties

+1

你能張貼類? – devOp

+0

@devOp你不需要看到這個類來回答這個問題,我確定op想要它申請* any *對象。 – Madbreaks

回答

1

就首先檢查對象包含迭代前至少一個項目:

if($a && count($a)){ 
    // iterate using foreach 
} 

我也覺得這樣不方便,但foreach是非常易於使用,所以這是一個有點折衷。我仍然寧願做以上比使用像for(這也可以工作)。

PHP count docs

乾杯

+0

Erg ...我想避免的。通常我做的: 如果{ 的foreach($ main_object爲$對象){ ... }} 和它的偉大工程,正如你所指出的(空($ main_object)!)。真的會認爲foreach會說「哦,看,'沒有什麼,我做了」,而不是拋出一個錯誤。 當你知道它是多麼令人討厭(並保持OOP)時,你可以得到答案。 –

0

你可以使用get_class_vars,它返回你的類在數組中的所有屬性。然後用for循環遍歷。您可以使用陣列鍵和對象訪問它們:

$aryAttr = get_class_vars($main_object); 
for ($p = 0; $p < count($aryAttr); $p++) { 
    $key=key($aryAttr); 
    $main_object->$key>value = $main_object->$key->value *3.14; 
    next($aryAttr); 
} 

這可能有幫助,但沒有測試它。

0

你爲什麼不檢查main_object是空的或不是你做的foreach循環之前

if($main_object->child != null) 
{ 
    foreach ($main_object->child as $object) 
{ 
    $object->value = $object->value * 3.14; 
} 
} 
+0

如果'$ main_object'沒有可公開顯示的成員迭代,仍然會導致錯誤。 – Madbreaks

+0

我的不好,你是對的應該有一個財產(我是一個集合),持有的子對象(S) – wonde