Php 文本缩进到多级数组?

Php 文本缩进到多级数组?,php,Php,我试图构建一个解析器,将文本缩进(TAB键)转换为多级php数组,但没有成功(我对编程非常陌生) 我有一个使用以下格式编写的txt文件: test1 test2 blah3 blah4 blah5 more content some more and more content 解析后,它应返回如下数组: $myarray[0]['c'] = "test1"; $myarray[0]['s'][0

我试图构建一个解析器,将文本缩进(TAB键)转换为多级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


非常感谢您的回答

当然您可以编写这样的解析器。实际上,您要做的是构建一个树数据结构,该结构存储为数组数组,其中叶节点是文本值,分支由选项卡确定

您需要做的是:

  • 逐行读取输入文本文件
  • 使用变量保持当前缩进
  • 对于每行,确定前导选项卡的数量(缩进)
  • 如果缩进与前一行的缩进匹配,则将该行上的其余文本作为同级添加到当前数组中
  • 如果比当前缩进大1,则添加分支(另一个子数组)
  • 小于当前缩进,相应设置当前数组
如果您需要更多关于这些步骤的说明,请告诉我

更新

这里有几点建议

您可以使用以下方法逐行读取文件:

$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);

   // process line here

}
fclose($file_handle);
$numTabs = 0;
while(substr($line, $numTabs, 1) == "\t")
{
    $numTabs++;
}
您可以使用以下代码检测每行中前导选项卡的数量:

$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);

   // process line here

}
fclose($file_handle);
$numTabs = 0;
while(substr($line, $numTabs, 1) == "\t")
{
    $numTabs++;
}
然后使用另一个调用获取线路的其余部分:

要测试行是否为空,可以使用:


好。。。这是显而易见的!但是谢谢你的回答:)我在子字符串和检测缩进错误方面有问题,比如两个或多个制表符而不是一个,空行等等。你真的有很多不同的问题。为了更好地利用这个网站,你必须单独询问他们,但我会尝试用一些细节更新答案。嗨,谢谢你的帮助!不幸的是,我有更多的问题。我使用了一个引用$this->currentary=&$this->tree[…][…];存储当前位置,但我不认为这是一个好主意,因为我可以更深入(即$this->currentary[…]),但我不能更上一层(即父数组($this->currentary)@sveva)-请问另一个问题。SO的格式为一个问题/帖子。