2013-04-08 16 views
0

爲什麼我無法通過索引$obj->property[0]訪問數組,但是可以迭代數組(每個數組只有一個值),然後獲取該值。無法按索引訪問數組,但可以迭代使用foreach

foreach($obj->property as $inner_obj) 
{ 
    foreach($inner_obj->property as $inner_inner_obj) 
     echo $inner_inner_obj->property; 
}

如果我通過索引訪問數組我得到Undefined offset: 0

編輯:的var_dump輸出

array(1) { 
[0]=> object(FooClass)#141 { 
    // yadda yadda 
    } 
}
+0

你可以添加到你的問題的輸出:'var_dump($ obj-> property)'? – Kovge 2013-04-08 11:46:22

+0

print_r($ obj-> property)也許它不是數組是對象 – 2013-04-08 11:47:15

+0

對我來說看起來像一個對象,而不是數組? – adeneo 2013-04-08 11:47:29

回答

0

如果您通過implementsCountable, Iterator類,你可以與foreach工作對象,但它不是陣列

+0

因此,除了foreach之外,沒有其他的方法可以訪問我需要的值嗎?我使用Yii框架btw。 CModel類還實現了IteratorAggregate,ArrayAccess – r00m 2013-04-08 12:04:15

0

$obj不是數組其因爲$obj->property[0]stdClass Object

會告訴你Undefined offset: 0

嘗試使用它像這樣來的property

$obj->property->property; 
0

月1日的價值,因爲你遍歷在foreach陣列的性能。用[0]你明確地嘗試以數組的形式訪問它。你可以讓你的對象擴展ArrayObject,並使php作爲你想要的數組訪問你的對象。

,讓使用您的對象作爲一個陣列的功能的接口:
http://www.php.net/manual/en/class.arrayaccess.php
http://www.php.net/manual/en/class.countable.php
http://www.php.net/manual/en/class.iteratoraggregate.php

對象本身,你可以擴展:
http://www.php.net/manual/en/class.arrayobject.php

國際海事組織,這是從來沒有在沒有數組接口的情況下循環一個對象是一個好主意,因爲這意味着你正在使用公共變量。我的建議是,除非不可能(SOAP?),否則始終要保護它們或保護它們。你可以通過getters和setter訪問它們。

0

$obj->property可能是一個數組,而不必關鍵0。 陣列中的鍵可能不是數字。所以你的數組可能是一個不是常規的關聯數組。 如果你想數字索引試試這個:如果你想訪問一個陣列中使用的第一個值

$numArray = array_values($obj->property); 
    var_dump($numArray); 

$first = reset($obj->property); 

它的工作原理,如果你的變量是一個array

相關問題