2012-04-04 7 views
5

Come posso accedere alla proprietà/valore di una matrice che è stata convertita in un oggetto? Per esempio, voglio accedere al valore dell'indice 0,Come accedere alla proprietà/valore di una matrice che è stata convertita in un oggetto?

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

errore,

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

penso $ obj [0] – MakuraYami

+1

@MakuraYami se avessi provato questo, si vedrebbe che non avrebbe funzionato. '$ obj' non è un array e riceverai un messaggio di errore in questa misura –

+0

Ciò che è interessante è che' var_dump (get_class_vars ($ obj)) 'stampa un array vuoto. –

risposta

2

Il motivo per cui non è possibile accedere ai valori tramite $obj->0 perché in base alla denominazione delle variabili PHP vedere http://php.net/manual/en/language.variables.basics.php per ulteriori informazioni. Anche se si utilizza ArrayObject si sarebbe comunque avere gli stessi problemi

ma c'è una patch per questo ... è possibile convertire tutti i tasti intero a stringa o scrivere la propria funzione di conversione

Esempio

$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 

uscita

string 'qualitypoint' (length=12) 

uscita 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) 

Multi Array outpur

Grazie

:)

4

Cercando questo:

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

var_dump($obj->test); 

Il risultato è:

string(12) "qualitypoint" 

Ma provando ad accedere a $obj->0, lo stesso e rror presenta: Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

Se si esegue un ciclo attraverso l'oggetto, duro, è possibile accedere alle proprietà normalmente come un array solito:

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

Apperantly, la struttura di denominazione regole sono le stesse come basic variable naming rules.

Se si converte a un ArrayObject invece, è possibile accedere l'indice normalmente:

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

E dumping:

var_dump($obj[0]); 

si otterrebbe:

string(12) "qualitypoint" 
+0

grazie per la risposta e la modifica. Penso che l'unica soluzione sia quella di convertire l'oggetto in un array ... sì, ho provato ad associare array e funziona bene. Grazie. – laukok

+0

Ricorda che il casting di tipo è un'operazione costosa. –

+0

scusa, che cos'è il cast di tipo? – laukok