php - 使用 PHP 循环遍历 JSON 数组
问题描述
我正在尝试遍历口袋妖怪网站的一系列动作。我正在使用 API PokeApi ( https://pokeapi.co/ )。
我的问题是如何使用纯 PHP 访问这些数组中的移动。我试过用它来调用 1 移动。但我不知道如何访问数组中的数据。像“move->version-group-details”。
$base = "https://pokeapi.co/api/v2/pokemon/";
$id = 1;
$data = file_get_contents($base.$id."/");
$pokemon = json_decode($data);
echo $pokemon->moves[0];
提前致谢 :)
解决方案
所以你有两种方法在这里你可以在我运行时这样做
$base = "https://pokeapi.co/api/v2/pokemon/";
$id = 1;
$data = file_get_contents($base.$id."/");
$pokemon = json_decode($data);
print_r($pokemon->moves[0]);
我得到结果:
stdClass Object
(
[move] => stdClass Object
(
[name] => razor-wind
[url] => https://pokeapi.co/api/v2/move/13/
)
[version_group_details] => Array
(
[0] => stdClass Object
(
[level_learned_at] => 0
[move_learn_method] => stdClass Object
(
[name] => egg
[url] => https://pokeapi.co/api/v2/move-learn-method/2/
)
[version_group] => stdClass Object
(
[name] => crystal
[url] => https://pokeapi.co/api/v2/version-group/4/
)
)
[1] => stdClass Object
(
[level_learned_at] => 0
[move_learn_method] => stdClass Object
(
[name] => egg
[url] => https://pokeapi.co/api/v2/move-learn-method/2/
)
[version_group] => stdClass Object
(
[name] => gold-silver
[url] => https://pokeapi.co/api/v2/version-group/3/
)
)
)
)
如果您想访问移动名称,则必须运行,$pokemon->moves[0]->move->name
因为我们正在返回一个对象。如果您想在 version_group_details 的 move_learn_method 中获取名称,则必须运行
$pokemon->moves[0]->version_group_details[0]-> move_learn_method->name
或者,如果你想返回所有数组而不是对象,只需运行这个
$base = "https://pokeapi.co/api/v2/pokemon/";
$id = 1;
$data = file_get_contents($base.$id."/");
$pokemon = json_decode($data, true);
print_r($pokemon['moves'][0]);
现在将返回
Array
(
[move] => Array
(
[name] => razor-wind
[url] => https://pokeapi.co/api/v2/move/13/
)
[version_group_details] => Array
(
[0] => Array
(
[level_learned_at] => 0
[move_learn_method] => Array
(
[name] => egg
[url] => https://pokeapi.co/api/v2/move-learn-method/2/
)
[version_group] => Array
(
[name] => crystal
[url] => https://pokeapi.co/api/v2/version-group/4/
)
)
[1] => Array
(
[level_learned_at] => 0
[move_learn_method] => Array
(
[name] => egg
[url] => https://pokeapi.co/api/v2/move-learn-method/2/
)
[version_group] => Array
(
[name] => gold-silver
[url] => https://pokeapi.co/api/v2/version-group/3/
)
)
)
)
因此,不必使用对象访问器->
,您可以使用数组表示法访问数据,而不是
$pokemon->moves[0]->version_group_details[0]-> move_learn_method->name
您现在可以使用:
$pokemon['moves']['version_group_details'][0]['move_learn_method']['name']
希望有帮助。
推荐阅读
- image - 在 docker 容器中找不到已安装的 pip 包
- elixir - 有效使用 genstage Elixir
- javascript - 将导入移动到单独的文件
- oracle - 无效的标识符和返回语句不能包含 PL/SQL 中的表达式
- java - 线程“main”java.lang.Error 中的异常:未解决的编译问题:Program.main
- wordpress - 使用 Polylang 以当前选择的语言返回术语
- jquery - 如何将css类应用于html页面上两次点击之间的所有元素?
- scala - 在相同情况下,None 和 Some() 上的 Scala 模式匹配
- java - 如何删除哈希图值的一部分?
- python - 如何将 yolo 检测到的对象发送到邮件