2014-12-07 41 views
1

比方說,這是我的JSON(我將無法更改此JSON文件)獲取JSON對象從它在列表中的位置

{"success":true, 
"users":{ 
      "1036344647":{"name":"joel", "age":18}, 
      "1036344365":{"name":"klant", "age":24}, 
      "1036344352":{"name":"grabben", "age":23} 
     } 
} 



我也有一個PHP代碼,收集此JSON數據並對其進行解碼。

$data = json_decode(file_get_contents("http://example.com/users/json")); 



正如你可以在我的JSON每個用戶都有一個隨機生成的ID,將每次我收集的數據從我的JSON文件更改看到。基本上我不知道任何用戶ID。

但我仍然希望能夠打印出一個用戶名稱,具體取決於它在列表中的位置。

例如:echo $ data-> users - > [THE SECOND ID(id爲用戶名爲「klant」)] - > name;

,所以我知道可以這樣做很容易,如果JSON文件被寫成一個數組,但事實並非如此。
有沒有什麼辦法可以打印出json中的對象,取決於它在列表中的位置?

回答

0

您可以通過「扔掉」的唯一ID與array_values()像這樣建立第2個數組:

$array = json_decode($yourJSON, true); 
$justValues = array_values($array["users"]); 
print_r($justValues); 

輸出:

Array 
(
    [0] => Array 
     (
      [name] => joel 
      [age] => 18 
     ) 

    [1] => Array 
     (
      [name] => klant 
      [age] => 24 
     ) 

    [2] => Array 
     (
      [name] => grabben 
      [age] => 23 
     ) 

) 

然後,您可以訪問諸如所以每個人的數據:

echo $justValues[1]["name"]; // klant 
+0

謝謝隊友,這是一個可行的很好的解決方案:d – ubj 2014-12-07 18:21:53

0

不,這是不可能的。 JavaScript設計對象不知道其鍵值對的「位置」。在幕後,這就是讓他們變得強大的原因。

第一步是重新考慮你爲什麼要需要根據位置使用JSON。

1

試試這個:

function findUser($id) 
{ 
    $data = json_decode(file_get_contents("http://example.com/users/json")); 
    return isset($data[0]->users->$id) ? $data[0]->users->$id : null; 
} 

$user = findUser(1036344365); 

var_dump($user); 

它將輸出

object(stdClass)#4 (2) { ["name"]=> string(5) "klant" ["age"]=> int(24) }