Comment puis-je obtenir un objet “clé” de la valeur? Est-il quelque chose comme array_search pour les objets?
J'ai une classe comme ceci:
stdClass Object
(
[id] => 1
[items] => stdClass Object
(
[0] => 123
[1] => 234
[2] => 345
[3] => 456
)
)
)
Appelons-le au-dessus de l'objet $foo
.
Disons $v = 234
. Compte tenu de $foo
et $v
, comment puis-je retourner la "clé" 1
?
Si $foo->items
était un tableau, je voudrais simplement faire $key = array_search($v,$foo->items);
. Mais cela ne fonctionne pas dans un objet.
Comment puis-je trouver la clé pour $v
sans boucle, par le biais de l'objet dans certains foreach
?
OriginalL'auteur Ryan | 2012-09-20
Vous devez vous connecter pour publier un commentaire.
Utilisation
get_object_vars
et de recherche à travers le tableau retourné.Référence: http://php.net/manual/en/function.get-object-vars.php
Voici un exemple de comment rechercher dans le tableau retourné pour une clé:
De sortie:
CodePad: http://codepad.org/in4w94nG
Ah, je l'ai eu.
$key = array_search($v, get_object_vars($foo->items));
Merci!Pas de problème, profitez-en!
OriginalL'auteur Daniel Li
Comme vous l'avez montré dans votre exemple, vous avez à traiter avec des
stdClass
objet(s). Ceux-ci sont tout à fait semblables à des tableaux et avec PHP, vous pouvez convertir facilement entre ces deux avec quelque chose appelé casting:Que ce petit exemple montre (j'ai juste utilisé le
$object
variable pour rendre la distribution plus visible, vous pouvez l'écrire comme one-liner), le fonte de l'objet de tableau vous permet d'utiliser la fonction connue (array_search
) sur l'objet.Car les tableaux et stdClass objets en PHP sont si semblables, cela fonctionne dans les deux sens:
Cela fonctionne aussi avec d'autres types de PHP, donc probablement en dehors de votre problème concret, quelque chose d'intéressant à lire sur le sujet: Type de JonglageDocs, mais prenez soin de vous, qu'en PHP cela a de nombreuses règles spéciales. Mais entre la matrice et les objets, c'est assez simple.
OriginalL'auteur hakre
$key = array_search($v, get_object_vars($foo->items));
edit: essayez cette
essayez la dernière édition.
Oui, ça marche. Voir mon commentaire sur la réponse ci-dessus: stackoverflow.com/questions/12519115/...
OriginalL'auteur Teena Thomas