使用PHP遍历JSON数组

时间:2019-01-16 19:28:44

标签: 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];

sample

预先感谢:)

1 个答案:

答案 0 :(得分:2)

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

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

希望有帮助。