我正在努力建立一个解析器,它应该将文本缩进(TAB KEY)转换为多级php数组(我对编程很新)
我有一个使用以下格式编写的txt文件:
test1
test2
blah3
blah4
blah5
more content
some more
and more content
解析后应返回如下数组:
$myarray[0]['c'] = "test1";
$myarray[0]['s'][0]['c'] = "test2";
$myarray[0]['s'][0]['s'][0]['c'] = "blah3";
$myarray[0]['s'][1]['c'] = "blah4";
$myarray[0]['s'][2]['c'] = "blah5";
$myarray[0]['s'][2]['s'][0]['c'] = "more content";
$myarray[1]['c'] = "some more";
$myarray[1]['s'][0]['c'] = "and more content";
可以在php中构建这样的功能吗?
之前你问我不能使用xml,因为我已经有了那个txt文件 必须首先转换为xml
非常感谢您的回答
答案 0 :(得分:0)
当然你可以编写这样的解析器。您要做的实际上是构建一个树数据结构,该结构存储为一个数组数组,其中叶节点是文本值,分支由TAB确定。
您需要做的是:
如果您需要对这些步骤进行更多说明,请告诉我。
<强>更新强>
以下是一些指示。
您可以逐行读取文件:
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
// process line here
}
fclose($file_handle);
您可以使用以下代码检测每行中前导TAB的数量:
$numTabs = 0;
while(substr($line, $numTabs, 1) == "\t")
{
$numTabs++;
}
然后使用对substr的另一个调用获取该行的其余部分:
$lineValue = substr($line, $numTabs);
要测试一行是否为空,您可以使用trim:
if(trim($line) == ""){
// line is blank.. just skip it!
}