2012-03-07 11 views
24

Sto cercando di ottenere una proprietà dai dati JSON decodificati in un oggetto PHP. È solo una richiesta dell'API dati di YouTube che restituisce un oggetto video che ha un oggetto contenuto come tale;Ottieni una proprietà dell'oggetto PHP che è un numero

[content] => stdClass Object 
       (
        [5] => https://www.youtube.com/v/r4ihwfQipfo?version=3&f=videos&app=youtube_gdata 
        [1] => rtsp://v4.cache7.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp 
        [6] => rtsp://v6.cache3.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp 
       ) 

Facendo

$object->content->5 

Lanci "T_DNUMBER inaspettata" - che ha perfettamente senso. Ma come ottengo il valore di una proprietà che è un numero?

Sono sicuro che dovrei saperlo. Grazie in anticipo.

+3

Sicuramente uno delle sfumature più fastidioso di PHP. –

+1

Possibile duplicato di [Come accedere alle proprietà dell'oggetto con nomi come numeri interi?] (Http://stackoverflow.com/questions/10333016/how-to-access-object-properties-with-names-like-integers) – nawfal

+0

[Questo spiegalo perfettamente] (https://stackoverflow.com/q/10333016/6521116) –

risposta

47

questo dovrebbe funzionare:

$object->content->{'5'}

+1

Questo sì. Grazie! –

+5

Non ha funzionato. Preso una proprietà 'indefinita: stdClass :: $ 5'. Utilizzo di PHP Versione 5.5.7 – Geo

+5

Questo flusso di lavoro NON FUNZIONA se la variabile era una matrice che è stata convertita in un oggetto. Una spiegazione dettagliata ed esempi possono essere trovati qui: http://stackoverflow.com/a/10333200/58795 –

17

Un'altra possibilità è quella di utilizzare il 2 ° parametro a json_decode:

$obj = json_decode(str, true); 

È ottenere un array invece di un oggetto PHP, che si può quindi indice come al solito:

$obj['content'][5] 
+1

Funzionerebbe anche, grazie. –

+0

molto più pulito IMHO, grazie per il suggerimento =) – Can

2

Un altro approccio è ting l'oggetto alla matrice.

$array = (array) $object; 
$array['content'][5]; 
+1

Questo non è corretto. Hai lanciato l'oggetto '$ object' su un array. La proprietà '$ content' è ancora un oggetto. Dovresti aggiungere anche questo: '$ array ['content'] = (array) $ array ['content'];'. Ecco perché la soluzione di codifica/decodifica JSON è più semplice. Converte anche tutti gli oggetti figli. –

+0

Vero, funziona solo con array unidimensionali –

1

Codifica JSON, quindi decodificare l'oggetto che passa true come secondo parametro nella funzione di decodifica. Ciò restituirà un array associativo.

$array = json_decode(json_encode($object), true); 

Ora è possibile utilizzare il nuovo array

echo $array['content']['5']; 

Utilizzando $object->content->{'5'} sarà non lavoro se l'oggetto è stato creato da colata una matrice a un oggetto.

Una descrizione più dettagliata può essere trovato qui: https://stackoverflow.com/a/10333200/58795

Problemi correlati