2009-09-08 48 views
1

有没有一种方法可以从JSON对象数组中取得JSON对象,取决于它的值?如何获取JSON对象,取决于它的值

我已经有了:

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

而且我要的是拉出取决于ID的用户。所以我可能会在user=2发送一个AJAX呼叫。我想要的是从JSON数组中提取id为2的用户。

我想知道这是否是最好的方法。我可以完全访问以另一种方式设置JSON数组,如果这样做会更容易。

回答

2

如果你在同一个数组上执行多次操作/搜索,你可能会考虑使用id作为散列表/数组的键。

$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这么明显......一旦你看到解决方案 – Christophe 2011-11-10 23:54:57

0

如果你想轻松检索用户在客户端上的:

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"} 
    } 
} 

,并在客户端上...

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

你可能甚至不需要“ID”前缀在这里。我对基于阵列的方法的担忧是,您无法保证ID是顺序的。这种使用对象属性的方法不受这种限制。