2010-10-27 36 views
2

我想通過它的鍵獲取一個數組的項目。該數組實際上是一個SolrObject,它實現了ArrayAccess,所以我明白我可以像訪問數組一樣訪問它的項目。直接訪問一個ArrayAccess項目

這是我的$ myObject的結構:

SolrObject Object 
(
    [116809] => SolrObject Object 
    (
     [title] => Array 
     (
      [0] => First value 
     ) 

     [description] => Array 
     (
      [0] => Second value 
     ) 

    ) 

    [591978] => SolrObject Object 
    (
     [title] => Array 
     (
      [0] => Third value 
     ) 

     [description] => Array 
     (
      [0] => Forth value 
     ) 
    ) 
) 

所以,如果我嘗試

var_dump($myobject[116809]); 

我得到空。

但如果我嘗試

echo array_key_exists(116809, $myobject); 

我得到

如果我嘗試遍歷$ MyObject來在foreach,我可以正確訪問它的元素。

爲什麼我不能通過它的鍵直接訪問一個元素?

編輯: 應答到@ircmaxell,這是的var_dump:

object(SolrObject)#219 (50) { 
    [116809]=> 
    object(SolrObject)#220 (2) { 
    ["title"]=> 
    array(1) { 
     [0]=> 
     string(43) "First value" 
    } 
    ["description"]=> 
    array(1) { 
     [0]=> 
     string(82) "Second value" 
    } 
    } 
    [591978]=> 
    object(SolrObject)#221 (2) { 
    ["title"]=> 
    array(1) { 
     [0]=> 
     string(104) "Third value" 
    } 
    ["description"]=> 
    array(1) { 
     [0]=> 
     string(95) "Fourth value" 
    } 
    } 
} 

這是的var_dump($ myobject-> getPropertyNames())的結果;

array(2) { 
    [0]=> 
    string(0) "" 
    [1]=> 
    string(0) "" 
} 
+0

我知道,但是這個對象實現了ArrayAccess。我怎麼能達到我需要的? – 2010-10-27 12:56:10

+0

這是您在做類似$ solr ['xyz']時調用的offsetGet方法。您是否嘗試過直接調用該方法用於測試目的? – VolkerK 2010-10-27 13:07:22

+0

@Russell:是的,你可以。如果對象實現了'ArrayAccess',它確實允許你像數組一樣訪問對象。 @David:就這個問題而言,嘗試用'isset($ myobject [116809])''進行測試。另外,顯示'var_dump($ myobject)'。我有一種感覺,基礎對象不是'SolrObject' ...我可能是錯的,但看着文檔,它看起來應該是不同的... – ircmaxell 2010-10-27 13:11:32

回答

2

我認爲這是PHP Solr擴展的一個bug。

0

您可能沒有正確實現ArrayAccess方法。