我有一个包含以下内容的.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")
)
)
由于
克里斯
答案 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++;
}