2010-10-27 2 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]); 

Я получаю NULL.

Но если я пытаюсь

echo array_key_exists(116809, $myobject); 

Я получаю

Если я пытаюсь итерацию $ MyObject с Еогеасп, я могу получить доступ к его элементам правильно.

Почему я не могу получить доступ к одному элементу по его ключу?

EDIT: Отвечая на @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. Как я могу достичь того, что мне нужно? –

+0

Это метод offsetGet, который вызывается, когда вы делаете что-то вроде $ solr ['xyz']. Вы пытались называть этот метод непосредственно для целей тестирования? – VolkerK

+0

@ Russell: Да, вы можете. Если объект реализует 'ArrayAccess', он позволяет вам обращаться к объекту, подобному массиву. @David: Насколько это проблема, попробуйте выполнить тестирование с помощью 'isset ($ myobject [116809])'. Также покажите 'var_dump ($ myobject)'. У меня есть ощущение, что базовый объект не является «SolrObject» ... Я мог ошибаться, но, глядя на документы, кажется, что он должен быть другим ... – ircmaxell

ответ

2

Я думаю, что это была ошибка расширения PHP Solr.

0

Возможно, вы неправильно применяли методы ArrayAccess.

Смежные вопросы