使用tab / no选项卡结构对.text文件进行排序

时间:2014-08-07 11:18:32

标签: php arrays sorting text foreach

我有一个包含以下内容的.txt文件

header 1
    sub header 1
    sub header 2 
header 2
    sub header 3
    sub header 4

子标题是标签。

我有当前的代码,但由于某种原因我不能将.txt文件/ t分开:

$str = file_get_contents($_FILES["text_file"]["tmp_name"]);
$lines = explode("\n", $str);

$i= 0;

foreach($lines as $key => $value){

    if(strpos($value, '/t') !== false){ 
        echo 'tab'; 
    }else{ 
        echo 'no tab'; 
    } 

    $i++;
}

我可以使用什么脚本将此结构排序为以下类型的数组:

Array (
    [0] => Array (
        "name" => "header 1"
        "subheadings" => Array("sub header 1","sub header 2")
        )
    [1] => Array (
        "name" => "header 2"
        "subheadings" => Array("sub header 3","sub header 4")
        )
    )

由于

克里斯

2 个答案:

答案 0 :(得分:0)

实际上你也不应该使用!==false比较并使用" \ t"在评论中提到 EaterOfCode

在foreach循环中,您应该使用:

foreach($lines as $key => $value){

    if(strpos($value, "\t") === 0){
        echo 'tab';
    }else{
        echo 'no tab';
    }

    $i++;
}

之前如果您使用!==false如果标签位于行末或中间,它也会被视为!==false,您应该检查标签是否位于字符串的开头并且不在字符串的任何位置

答案 1 :(得分:0)

使用上面有用的评论,我提出了这个基本的解决方案。这似乎是有效的,因为我在原始问题中提到了阵列。感谢。

foreach($lines as $key => $value){

    if(strpos($value, "\t") === false){
        $o[$h]['name'] = $value; 

        $h++;
    }
    else{ 
        if(is_array($o)){
            $o[$h-1]['subheadings'][] = trim($value);
        }
        else{
            echo 'error';
        }

        $s++;
    } 

    $a++;
}