我有一个包含以下内容的.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
复制相似问题