2010-08-05 12 views
6

Ho un oggetto con una sola chiave e il suo valore. Ma non conosco la chiave per accedervi. Qual è il modo più efficiente per ottenere la chiave senza enumerare l'oggetto?PHP: ottenere una chiave singola dall'oggetto

+0

Quindi, come fai a sapere che hai la chiave giusta? – NullUserException

+0

Stai cercando di fare un 'array_search'? –

+2

Ho un singolo oggetto json convertito in php come '{" foo ": 3}' e ho bisogno di prendere entrambi, nome chiave e valore. – Pablo

risposta

21

Se si desidera solo per accedere al valore, non è necessario la chiave (in realtà nome di proprietà) a tutti:

$value = current((array)$object); 

Se si vuole veramente il nome proprietà, provate questo:

$key = key((array)$object); 
+0

Ho una matrice di oggetti e gli oggetti hanno una proprietà ciascuno, e non conosco i nomi delle proprietà. Sto iterando attraverso l'array usando il ciclo 'foreach', e per ogni oggetto, voglio sia la chiave che il valore. Ho trovato questa soluzione, ma non è inefficiente perché stai lanciando l'oggetto $ a un array ogni volta? (Scusate se è troppo semplice, ma sono un newb. Una risposta sarà molto apprezzata, in quanto non sono sicuro che sia saggio utilizzarlo o meno) .. – Solace

3
$array = array("foo" => "bar"); 

$keys = array_keys($array); 

echo $keys[0]; 

// Output: foo 

See: http://php.net/manual/en/function.array-keys.php

+0

Funziona davvero per un oggetto? 'stdClass :: __ set_state (array ( 'tag1' => 1, ))' – Pablo

+0

@Michael: Errore mio, ho pensato che stavi tentando di recuperare la chiave da un array. In tal caso, si consiglia di eseguire il cast dell'oggetto su un array molto probabilmente. Vedi l'esempio di @ thomasrutter: http://stackoverflow.com/questions/3411495/php-get-a-single-key-from-object/3411520#3411520 – gpmcadam

+0

Inizialmente sono stato ingannato anche dall'uso della parola "chiave" , che è un termine array ... – deceze

4

È possibile lanciare l'oggetto in un array come questo:

$myarray = (array)$myobject; 

E poi, per una serie che ha solo un singolo valore, questo dovrebbe prendere la chiave per quel valore.

$value = key($myarray); 

Si potrebbe fare entrambi quelli in una riga se lo si desidera. Certo, potresti anche farlo enumerando l'oggetto, come hai detto nella tua domanda.

per ottenere il valore piuttosto che il tasto, quindi:

$value = current($myarray); 
Problemi correlati