首页 > 解决方案 > 使用 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];

样本

提前致谢 :)

标签: phpjson

解决方案


所以你有两种方法在这里你可以在我运行时这样做

$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']

希望有帮助。


推荐阅读