2012-05-25 11 views
9

Esto es ... Ni siquiera sé lo que está pasando.PHP Indefinido índice de matriz. ¿Por qué?

// var_dump of items before 
object(stdClass)[84] 
    public '75' => object(stdClass)[87] 

$items = (array) $items; // Casting unserialized stdClass to array 
var_dump($items); 

//Result of var dump: 
array 
    '75' => 
    object(stdClass)[87] 

//Now lets get this item: 
var_dump($items[75]); // Error 
var_dump($items['75']); // Error 

¿Qué?

Gracias.

+1

muestra $ items –

+0

Intenta convertir en una variable diferente '$ new_items = (array) $ items; var_dump ($ new_items [75]); ' – Aziz

+0

Esto me da el mismo resultado. –

Respuesta

4

Creo que está utilizando una extensión de depuración, por lo que la salida var_dump() es diferente de la biblioteca standart, las propiedades no pueden ser numéricas, pero $obj->{'75'} está bien. Si puede alcanzar el objeto secundario por $items->{'75'} sí, tiene una propiedad numérica. lo contrario se puede tratar print_r($items); y ver la salida original, o compruebe la matriz después de la emisión get_object_vars()

<?php 

$items = new stdClass(); 
$items->{'75'} = new stdClass(); 
$items->{'75'}->{'85'} = new stdClass(); 


$items = (array) $items; // Casting unserialized stdClass to array 
$items_array = get_object_vars($items); // getting object vars as an array. 

var_dump($items["75"]); // Error 
var_dump($items['75']); // Error 
var_dump($items_array['75']); // Works 

PHP: #45959

Leer el blockquote calidad: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

+0

Sí, cuando $ artículos sigue siendo un objeto PUEDO llegar al "75" con '$ obj -> {'75'}'. Por favor, mira: http://pastebin.com/nTbGscD5 –

+1

entonces, tienes que usar get_object_vars(); –

+0

Funcionó, gracias. Fue extraño, porque he usado array_keys en $ items luego de convertirlo a array y funcionó. –

2

La conversión a una matriz no trabaja así.

Ver aquí: get_object_vars() vs. cast to array

y aquí: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

cita en bloque "Si un objeto se convierte en una matriz, el resultado es una matriz cuyos elementos son las propiedades del objeto Las claves son el. nombres de variables miembro, con algunas excepciones notables: las propiedades enteras son inaccesibles, las variables privadas tienen el nombre de clase antepuesto al nombre de la variable, las variables protegidas tienen un '*' antepuesto al nombre de la variable. Estos valores antepuestos tienen bytes nulos en cada lado.

Cuestiones relacionadas