2009-04-16 22 views
90

Estoy usando una clase de PHP que alguien escribió para interactuar con la API de BaseCamp.¿Cómo accedo a esta propiedad del objeto con un nombre con guión?

La llamada particular que estoy haciendo es recuperar los elementos en una lista de tareas pendientes, que funciona bien.

Mi problema es que no estoy seguro de cómo acceder solo a la propiedad todo-items del objeto que se devuelve. Aquí está la var_dump del objeto devuelto:

object(stdClass)[6] 
    public 'completed-count' => string '0' (length=1) 
    public 'description' => string 'Description String' (length=89) 
    public 'id' => string '12345' (length=7) 
    public 'milestone-id' => string '' (length=0) 
    public 'name' => string 'Error Reports' (length=13) 
    public 'position' => string '1' (length=1) 
    public 'private' => string 'false' (length=5) 
    public 'project-id' => string '58904' (length=7) 
    public 'tracked' => string 'false' (length=5) 
    public 'uncompleted-count' => string '1' (length=1) 
    public 'todo-items' => 
    object(stdClass)[3] 
     public 'todo-item' => 
     object(stdClass)[5] 
      public 'completed' => string 'false' (length=5) 
      public 'content' => string 'content string here' (length=133) 
      public 'created-on' => string '2009-04-16T20:33:31Z' (length=20) 
      public 'creator-id' => string '23423' (length=7) 
      public 'id' => string '234' (length=8) 
      public 'position' => string '1' (length=1) 
      public 'responsible-party-id' => string '2844499' (length=7) 
      public 'responsible-party-type' => string 'Person' (length=6) 
      public 'todo-list-id' => string '234234' (length=7) 
    public 'complete' => string 'false' (length=5) 

cómo puedo acceder a la parte todo-items de este objeto?

Respuesta

206
<?php 
$x = new StdClass(); 
$x->{'todo-list'} = 'fred'; 
var_dump($x); 

Entonces, $ object -> {'todo-list'} es el subobjeto. Si puede configurarlo así, también puede leerlo de la misma manera.

Si desea convertirlo a una matriz, que puede ser un poco más fácil (es decir, el obvio $ ret ['todo-list'] accediendo), este código se toma casi literal de Zend_Config y se convertirá para usted .

public function toArray() 
{ 
    $array = array(); 
    foreach ($this->_data as $key => $value) { 
     if ($value instanceof StdClass) { 
      $array[$key] = $value->toArray(); 
     } else { 
      $array[$key] = $value; 
     } 
    } 
    return $array; 
} 
+0

theeeere vamos, esa es la sintaxis que estoy buscando. ¡Gracias! – Ian

+23

Aunque es corto y agradable (y lo que recomendaría), también puede hacerlo a través de variables: '$ todolist = 'todo-lista'; $ x -> $ todolist' – Christian

+0

* Respuesta muy tardía *, con PHP> 5.5, hay mejores soluciones. O bien 'lanzas' el objeto a una matriz, o prueba con 'get_object_vars()'. –

23

¡Pruebe de esta manera más simple!

$obj = $myobject->{'mydash-value'}; 
$objToArray = array($obj); 
+3

Buenas respuestas acompañan ejemplos de código con una explicación para futuros lectores. Si bien la persona que hace esta pregunta puede comprender tu respuesta, explicar cómo llegaste a ella podría ayudar a muchos otros. – Stonz2

+1

Oh, esta es la respuesta REAL. Intentaba por siempre acceder a un nombre de propiedad de objeto con un '.' en él y esto limpió eso! – russellmania

Cuestiones relacionadas