2009-09-08 8 views
1

Existe-t-il un moyen d'extraire un objet JSON d'un tableau d'objets JSON en fonction de sa valeur?comment obtenir l'objet JSON en fonction de sa valeur

Ce que j'ai:

$users = [{"id":1, "name":"Some Name"}, 
      {"id":2, "name":"Another Name"}, 
      {"id":3, "name":"Third Name"}]; 

Et ce que je veux est de retirer l'utilisateur en fonction de l'identifiant. Donc, je pourrais avoir un appel AJAX qui envoie user=2. Ce que je veux, c'est tirer l'utilisateur avec un identifiant de 2 à partir du tableau JSON. Je me demande si c'est la meilleure façon de le faire ou non. J'ai un accès complet pour configurer le tableau JSON d'une autre manière, si cela pouvait le rendre plus facile.

Répondre

2

Si vous effectuez cette opération/effectuez une recherche plusieurs fois sur la même baie, vous pouvez envisager d'utiliser l'ID comme clé d'une table/table de hachage.

$json = '[{"id":1, "name":"Some Name"}, 
      {"id":4, "name":"Another Name"}, 
      {"id":9, "name":"Third Name"}]'; 

$users = array(); 
foreach(json_decode($json, true) as $u) { 
    $users[$u['id']] = $u; 
} 

echo $users[9]['name']; 
+0

+1 si évident ... une fois que vous voyez la solution – Christophe

0

Si vous voulez la facilité de récupération de l'utilisateur sur le client:

jsonData = 
{ 
    "selectedId": 2, 
    "users": 
    { 
    "Id1": {"id":1, "name":"Some Name"}, 
    "Id2": {"id":2, "name":"Another Name"}, 
    "Id3": {"id":3, "name":"Third Name"}, 
    "Id100": {"id":100, "name":"Some Name"} 
    } 
} 

et sur le client ...

var selectedId = data.selectedId; 
var user = data.users["Id" + selectedId]; 

Vous pouvez même pas besoin le préfixe "Id" ici. Mon inquiétude à propos de l'approche basée sur les matrices est que vous ne pouvez jamais garantir que les identifiants sont séquentiels. Cette approche, qui utilise des propriétés d'objet, n'est pas liée par ce type de limitation.

Questions connexes