我有一个包含以下内容的.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")
        )
    )谢谢
克里斯
发布于 2014-08-07 19:40:35
事实上,您也不应该使用!==false比较,而应该使用"\t“,就像注释中提到的EaterOfCode。
在foreach循环中,您应该使用:
foreach($lines as $key => $value){
    if(strpos($value, "\t") === 0){
        echo 'tab';
    }else{
        echo 'no tab';
    }
    $i++;
}早些时候,如果tab在行尾或中间使用!==false,它也会被视为!==false,您应该检查tab是否在字符串的开头,而不是字符串的任何位置
发布于 2014-08-07 19:45:14
使用上面有用的注释,我提出了这个基本的解决方案。这似乎是可行的,因为我已经得到了我在原始问题中询问的数组。谢谢。
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++;
}https://stackoverflow.com/questions/25181155
复制相似问题