用PHP解析阀门数据格式文件

用PHP解析阀门数据格式文件,php,parsing,Php,Parsing,我完全被困在如何开始用PHP解析此类文件中。这些是具有可变数量子数组的某种数组 示例文件 "itembuilds" { "author" "Valve" "hero" "npc_dota_hero_axe" "Title" "Recommended items for Axe" "Items" { "#DOTA_Item_Build_Starting_Items" {

我完全被困在如何开始用PHP解析此类文件中。这些是具有可变数量子数组的某种数组

示例文件

"itembuilds"

{

    "author"        "Valve"
    "hero"          "npc_dota_hero_axe"
    "Title"         "Recommended items for Axe"
    "Items"
    {
        "#DOTA_Item_Build_Starting_Items"
        {
            "item"   "item_stout_shield"
            "item"   "item_flask"
            "item"   "item_tango"
            "item"   "item_courier"
        }
        "#DOTA_Item_Build_Early_Game"
        {
            "item"   "item_boots"
            "item"   "item_ring_of_health"
            "item"   "item_tango"
            "item"   "item_tango"
        }
        "#DOTA_Item_Build_Core_Items"
        {
            "item"   "item_blink"
            "item"   "item_vanguard"
        }
        "#DOTA_Item_Build_Luxury"
        {
            "item"   "item_heart"
            "item"   "item_blade_mail"
        }
    }
}
"dota_shops"

{

    "consumables"
    {
        "item"      "item_clarity"
        "item"      "item_tango"
        "item"      "item_flask"
        "item"      "item_smoke_of_deceit"
        "item"      "item_tpscroll"
        "item"      "item_dust"
        "item"      "item_courier"
        "item"      "item_flying_courier"
        "item"      "item_ward_observer"
        "item"      "item_ward_sentry"
        "item"  "item_bottle"                           
    }
        "something"
        {
                "Key" "value"
                "Key2" "value"
        }
}
另一个示例文件

"itembuilds"

{

    "author"        "Valve"
    "hero"          "npc_dota_hero_axe"
    "Title"         "Recommended items for Axe"
    "Items"
    {
        "#DOTA_Item_Build_Starting_Items"
        {
            "item"   "item_stout_shield"
            "item"   "item_flask"
            "item"   "item_tango"
            "item"   "item_courier"
        }
        "#DOTA_Item_Build_Early_Game"
        {
            "item"   "item_boots"
            "item"   "item_ring_of_health"
            "item"   "item_tango"
            "item"   "item_tango"
        }
        "#DOTA_Item_Build_Core_Items"
        {
            "item"   "item_blink"
            "item"   "item_vanguard"
        }
        "#DOTA_Item_Build_Luxury"
        {
            "item"   "item_heart"
            "item"   "item_blade_mail"
        }
    }
}
"dota_shops"

{

    "consumables"
    {
        "item"      "item_clarity"
        "item"      "item_tango"
        "item"      "item_flask"
        "item"      "item_smoke_of_deceit"
        "item"      "item_tpscroll"
        "item"      "item_dust"
        "item"      "item_courier"
        "item"      "item_flying_courier"
        "item"      "item_ward_observer"
        "item"      "item_ward_sentry"
        "item"  "item_bottle"                           
    }
        "something"
        {
                "Key" "value"
                "Key2" "value"
        }
}

迟来的回答,但刚刚看到这个。相关数据为(阀门数据格式)[https://developer.valvesoftware.com/wiki/KeyValues],也称为KeyValues格式,非常让人想起JSON

大约一年前,我编写了这个脚本,它可以将VDF数据转换为有效的JSON。您可以使用它一次并存储生成的JSON,也可以随时从VDF调用JSON


我在网上找到了一个


repo有一个js和python实现,将它们移植到PHP应该不会太难。

我有一个解析它们的方法,但显然这对您没有直接的帮助。。。我要提醒的是,不加引号的值似乎也是合法的,而且转义码可能存在问题。虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。