2012-04-04 16 views
5

¿Cómo puedo acceder a la propiedad/valor de una matriz que se ha convertido en un objeto? Por ejemplo, quiero acceder al valor en el índice 0,¿Cómo acceder a la propiedad/valor de una matriz que se ha convertido en un objeto?

$obj = (object) array('qualitypoint', 'technologies', 'India'); 
var_dump($obj->0); 

error,

Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$' in C:...converting_to_object.php on line 11

+0

creo $ obj [0] – MakuraYami

+1

@MakuraYami si hubiera intentado esto, se vería que no iba a funcionar. '$ obj' no es una matriz y obtendría un mensaje de error en esa medida –

+0

Lo que es interesante es que' var_dump (get_class_vars ($ obj)) 'imprime una matriz vacía. –

Respuesta

2

El razón por la que no puede acceder a los valores a través de $obj->0 es porque contra nombres de variable PHP ver http://php.net/manual/en/language.variables.basics.php para más información. Incluso si utiliza ArrayObject todavía tendría los mismos problemas

pero hay un parche para esto ... usted puede convertir todas las claves enteras de cuerda o escribir su propia función de conversión

Ejemplo

$array = array('qualitypoint', 'technologies', 'India' , array("hello","world")); 
$obj = (object) $array; 
$obj2 = arrayObject($array); 
function arrayObject($array) 
{ 
    $object = new stdClass(); 
    foreach($array as $key => $value) 
    { 
     $key = (string) $key ; 
     $object->$key = is_array($value) ? arrayObject($value) : $value ; 
    } 
    return $object ; 
} 
var_dump($obj2->{0}); // Sample Output 
var_dump($obj,$obj2); // Full Output to see the difference 


$sumObject = $obj2->{3} ; /// Get Sub Object 
var_dump($sumObject->{1}); // Output world 

salida

string 'qualitypoint' (length=12) 

salida completa

object(stdClass)[1] 
    string 'qualitypoint' (length=12) 
    string 'technologies' (length=12) 
    string 'India' (length=5) 

    array 
     0 => string 'hello' (length=5) 
     1 => string 'world' (length=5) 

object(stdClass)[2] 
    public '0' => string 'qualitypoint' (length=12) 
    public '1' => string 'technologies' (length=12) 
    public '2' => string 'India' (length=5) 
    public '3' => 
    object(stdClass)[3] 
     public '0' => string 'hello' (length=5) 
     public '1' => string 'world' (length=5) 

matriz multi outpur

Gracias

:)

4

Intentar esto:

$obj = (object) array('test' => 'qualitypoint', 'technologies', 'India'); 

var_dump($obj->test); 

El resultado es:

string(12) "qualitypoint" 

Pero tratando de acceder $obj->0, la misma e rror aparece: Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

Si se recorre a través del objeto, duro, se puede acceder a las propiedades normalmente como una matriz de costumbre:

foreach($obj as $x) { 
    var_dump($x); 
} 

Apperantly, la propiedad reglas de nombres son los mismos que el basic variable naming rules.

Si convierte a un ArrayObject lugar, se puede acceder al índice normal:

$obj = new ArrayObject(array('qualitypoint', 'technologies', 'India')); 

y el dumping que:

var_dump($obj[0]); 

que se obtendría:

string(12) "qualitypoint" 
+0

gracias por la respuesta y edición. Creo que la única solución es convertir el objeto de nuevo en una matriz ... sí, traté de asociar la matriz y funciona bien. Gracias. – laukok

+0

Recuerde que el tipo de fundición es una operación costosa. –

+0

lo siento, ¿qué es 'tipo de fundición'? – laukok

Cuestiones relacionadas