【发布时间】:2016-03-26 03:31:50
【问题描述】:
在将文件内容拆分为多维数组时,我需要一些帮助。
文件内容示例:
--[DEATH KNIGHT]--
--|Blood|--
--{Single}--
/* MACRO CODE FOR SINGLE TARGET */
--{MULTI}--
/* MACRO CODE FOR MULTIPLE TARGETS */
--|Frost|--
/* MACRO CODE FOR SINGLE TARGET */
--{MULTI}--
/* MACRO CODE FOR MULTIPLE TARGETS */
--{Single}--
--[DRUID]--
--|Guardian|--
--{Single}--
/* MACRO CODE FOR SINGLE TARGET */
--{Multi}--
/* MACRO CODE FOR MULTIPLE TARGETS */
我需要读取此文件并将其拆分为具有以下结构的数组:
array(
'DEATHKNIGHT' => array(
'Blood' => array(
'Single' = 'Single Target Macro Code',
'Multi' = 'Multiple Target Macro Code'
),
'Frost' => array(
'Single' = 'Single Target Macro Code',
'Multi' = 'Multiple Target Macro Code'
)
),
'DRUID' => array(
'Guardian' => array(
'Single' = 'Single Target Macro Code',
'Multi' = 'Multiple Target Macro Code'
)
)
我正在使用 file_get_contents() 将文件的内容读入字符串。我正在使用 preg_match_all() 来提取我定义的数组键。以下是我正在使用的正则表达式:
$class_regex = '/(?:-{2})(?:\[)(?:[A-Z][\w]+)(?:[\s][A-Z][\w]+)?(?:\])(?:-{2})/';
$spec_regex = '/(?:-{2})(?:\|)(?:[A-Z][\w]+)(?:[\s][A-Z][\w]+)?(?:\|)(?:-{2})/i';
$target_regex = '/(?:-{2})(?:\{)(?:[A-Z][\w]+)(?:[\s][\(][\d][\D][\)])?(?:\})(?:-{2})/i';
我可以成功提取密钥,并且可以将文件分成特定元素,但是在尝试创建数组时我很挣扎。任何帮助将不胜感激。提前谢谢你。
【问题讨论】:
-
用
while ($line = fgets($file))逐行阅读,而不是用file_get_contents()阅读全文。 -
这些“目标”键
Single和Multi是文件内容中的静态(常量)吗? -
是的,'Single' 和 'Multi' 是静态的。其他一切都不是。 “宏代码”的长度会有所不同。这意味着每个“宏代码”将覆盖不同数量的行。
标签: php arrays regex multidimensional-array