2012-05-25 18 views
9

Questo è ... non so nemmeno cosa stia succedendo.PHP Indice indefinito dell'array. Perché?

// 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 

Cosa?

Grazie.

+1

Si prega di mostrare $ articoli –

+0

Provare a inserire in una variabile diversa '$ new_items = (array) $ articoli; var_dump ($ new_items [75]); ' – Aziz

+0

Questo mi dà lo stesso risultato. –

risposta

4

Penso che si stia utilizzando un'estensione di debug, quindi l'output var_dump() è diverso dalla libreria standard, le proprietà non possono essere numeriche ma $obj->{'75'} è okay. Se è possibile raggiungere l'oggetto secondario con $items->{'75'} sì, si dispone di una proprietà numerica. altrimenti si può provare print_r($items); e vedere l'uscita originale, o controllare la matrice dopo l'emissione 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

Leggi il blockquote casting: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

+0

Sì, quando $ items è ancora un oggetto POSSO raggiungere il "75" con '$ obj -> {'75'}'. Per favore, guarda: http://pastebin.com/nTbGscD5 –

+1

quindi, devi usare get_object_vars(); –

+0

Ha funzionato, grazie. È stato strano, perché ho usato array_keys sugli articoli $ dopo averlo lanciato su array e ha funzionato. –

2

Casting ad una matrice non lavorare così

Vedi qui: get_object_vars() vs. cast to array

e qui: http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

Blockquote "Se un oggetto viene convertito in una matrice, il risultato è una matrice i cui elementi sono proprietà dell'oggetto Le chiavi sono. nomi di variabili membro, con alcune eccezioni degne di nota: le proprietà integer non sono accessibili, le variabili private hanno il nome della classe anteposto al nome della variabile, le variabili protette hanno un prefisso '*' al nome della variabile.