让我们说这是我的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-> [第二个ID(用户名为&#34的id; klant")] - > name;
所以我知道如果将json文件写成数组,这可以很容易地完成,但事实并非如此。
有什么方法可以根据它在列表中的位置打印出json中的对象吗?
答案 0 :(得分: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) }
答案 1 :(得分:0)
不,这是不可能的。设计的JavaScript对象不知道其键值对的“位置”。在幕后,这就是让他们变得强大的原因。
第一步是重新考虑为什么需要根据位置使用JSON。
答案 2 :(得分:0)
您可以通过array_values()
“抛弃”这些唯一ID来构建第二个数组,如下所示:
$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