php 怎么解析文本,PHP解析自定义纯文本数据库

我有一个文本文件,存储有关不同项目的信息.

该文件是结构化的.文件中的每个项目都由大括号{}分隔,并以逗号开头.每个项目都有其拥有的属性列表,并且属性可以存在或不存在.如果不存在,服务器将假定它们为“默认”.

每个条目都用大括号括起来,并以逗号结尾:{},

该文件还包含标准的C注释,//以及/ * * /

该项目的每个属性都是从33个属性池中标准化的,其中只有3个是强制性的.可以包括或不包括属性.后端程序假定不包含的属性为默认属性.

有一些属性可以是多行甚至是多属性(如果需要的话,可以构成一个数组).

因此,该文件大致如下所示:

itemdb: (

/*

{

Multi line comment

here to explain the file

},

*/

// Here starts the items

{

Id: 500

DatabaseName: "Item_1"

Name: "Item 1"

Type: 1

Buy: 40

Weight: 10

},

{

Id: 501

DatabaseName: "Item_2"

Name: "Item 2"

Type: 1

Sell: 600

Weight: 200

Script:

},

// Here is some more items

{

Id: 637

DatabaseName: "Item_137"

Name: "Item 137"

Type: 5

Buy: 9000

Weight: 300

Trade: {

nodrop: true

notrade: true

}

Script:

do this stuff;

then this stuff;

">

},

// Note: Edited this in 2015-11-23, see below.

)

我需要一种将所有元素分解为数组以显示给用户的方法.数组看起来像这样(来自上面的示例):

$itemDB = Array

(

[500] => Array

(

[DatabaseName] => Item_1

[Name] => Item 1

[Type] => 1

[Buy] => 40

[Weight] => 10

)

[501] => Array

(

[DatabaseName] => Item_2

[Name] => Item 2

[Type] => 1

[Sell] => 600

[Weight] => 200

[Script] => do stuff

)

[637] => Array

(

[DatabaseName] => Item_137

[Name] => Item 137

[Type] => 5

[Buy] => 9000

[Weight] => 300

[Trade] => array

(

[nodrop] => true

[notrade] => true

)

[Script] => do this stuff;\nthen this stuff

)

);

(因此,基本上将文件分成多维数组,文件的’Id’属性是每个数组的键,文件的每个属性是其自己的键/值)

我确实想出了以下代码来将数组分成每个条目:

$ready = str_replace(array("{","}"),"|", $itemDB);

$itemDB_explode = explode("|", $ready);

但是这段代码只会让我半途而废.我基本上得出这样的数组:

[7]=> string(124) " Id: 501 DatabaseName: "Item_2" Name: "Item 2" Type: 1 Sell: 600 Weight: 200 Script: "

但是对于我的一生,我无法弄清楚如何获得比这更进一步的信息,包括如何使数组的键成为Id以及每个属性都有自己的键/值.

重点是向用户显示条目,允许他们进行编辑,然后将文件保存回去.希望我能在将其保存回本方面获得帮助.

对于那些无疑会问的人:是的,我知道类似这样的内容更适合SQL数据库.问题是该文件以及读取和解释该文件的后端不是我写的,我无法更改它.我只是在编写基于Web的前端以轻松更改该文件.

预先感谢您提供的帮助.

编辑2015-11-23:

我从最初的问题中删除了一些属性.考虑对实际文件进行的编辑,并添加那些缺少的属性:

{

Id: 845

DatabaseName: "Item_345"

Name: "Item 345"

Type: 3

Buy: 30000

Nouse: {

override: 30

sitting: true

}

Stack: [99, 4]

OnEquipScript:

OnUnequipScript:

do some more stuff;

this is some more stuff;

">

},

考虑一下文件中该附加块的结果数组是什么样的:

[845] => Array

(

[DatabaseName] => Item_345

[Name] => Item 345

[Type] => 3

[Buy] => 30000

[Nouse] => array

(

[override] => 30

[sitting] => true

)

[Stack] =>

(

[0] => 99

[1] => 4

)

[OnEquipScript] => do this stuff;

[OnUnequipScript] => do some more stuff;\nthis is some more stuff;

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值