PHP - 从JSON文件中提取数组(对象?)

时间:2015-10-31 18:49:50

标签: php arrays json

我有一个JSON文件,我想通过PHP访问内容。问题是访问JSON文件中的数组。本网站上建议的其他方法似乎不起作用。 JSON结构的一个示例位于底部。这里的PHP代码是我的开始和结束PHP标记之间唯一的PHP代码。

这个PHP代码有效。我正在访问不属于数组的内容。

$jsondata = file_get_contents('BFZ.json');
$data = json_decode($jsondata, true);
$id = $data['name'];
echo $id;

这不起作用。我试图访问"名称"部分"卡" JSON文件中的数组(对象?)。

$jsondata = file_get_contents('BFZ.json');
$data = json_decode($jsondata, true);
$id = $data['cards']['name'];
echo $id;

这也不起作用:

$id = $data['cards']['name'][0];

带有示例信息的JSON文件的结构:

              "name" : "Nemesis",
              "code" : "NMS",
      "gathererCode" : "NE",
           "oldCode" : "NEM",
"magicCardsInfoCode" : "ne",
       "releaseDate" : "2000-02-14",
            "border" : "black",
              "type" : "expansion",
             "block" : "Masques",
        "onlineOnly" : false,
           "booster" : [ "rare", ... ],
             "cards" : [ {}, {}, {}, ... ]

"卡的结构"具有示例信息的JSON文件的数组(对象?):

           "name" : "Sen Triplets",
       "manaCost" : "{2}{W}{U}{B}",
            "cmc" : 5,
         "colors" : ["White", "Blue", "Black"],
           "type" : "Legendary Artifact Creature — Human Wizard",
     "supertypes" : ["Legendary"],
          "types" : ["Artifact", "Creature"],
       "subtypes" : ["Human", "Wizard"],
         "rarity" : "Mythic Rare",
           "text" : "At the beginning of your upkeep, choose target opponent.
                     This turn, that player can't cast spells or activate
                     abilities and plays with his or her hand revealed.
                     You may play cards from that player's hand this turn.",
         "flavor" : "They are the masters of your mind.",
         "artist" : "Greg Staples",
         "number" : "109",
          "power" : "3",
      "toughness" : "3",
         "layout" : "normal",
   "multiverseid" : 180607,
      "imageName" : "sen triplets",
             "id" : "3129aee7f26a4282ce131db7d417b1bc3338c4d4"

我从这里获得了JSON文件:http://mtgjson.com/。该文件引用了纸牌游戏Magic:the Gathering。我使用PHP是因为我的意图是最终将数据加载到MySQL数据库中。

3 个答案:

答案 0 :(得分:1)

看起来cards键包含一个json对象数组。 json_decode()将解析它。

鉴于此,$data['cards'][0]['name']应该为您提供第一张卡的名称。类似地,$data['cards'][1]['name']应该为您提供第二张卡的名称。

答案 1 :(得分:0)

您定位的$ data [' name']是扩展程序中的数据。

您需要访问阵列['卡片']才能到达卡片列表,然后通过循环获取所有卡片名称。

您可能想要这样做:

$jsondata = file_get_contents('http://mtgjson.com/json/BFZ.json');
$data = json_decode($jsondata, true);

$cards = $data['cards'];

$cardsName = array();
foreach ($cards as $card) {
    $cardsName[] = $card['name'];
}

var_dump($cardsName);

这将创建一个数组将所有卡名称

答案 2 :(得分:0)

您需要反序列化数据

$jsondata = file_get_contents('http://mtgjson.com/json/BFZ.json');
$data = unserialize($jsondata);  
// Show the unserialized data;  
var_dump ($data);