如何在两个模式之间复制文件行并在PHP中存储在数组中
我当前的PHP代码是:如何在两个模式之间复制文件行并在PHP中存储在数组中,php,Php,我当前的PHP代码是: $searchFor="Sum"; $handle=@fopen("assets/lib/basic.lib"); //this if my file consisting of sum structure if($handle){ while(!feof($handle)){ $buffer=fgets($handle); if(strpos($buffer,$searchFor)!==FALSE) $matches[]=$buffer;
$searchFor="Sum";
$handle=@fopen("assets/lib/basic.lib"); //this if my file consisting of sum structure
if($handle){
while(!feof($handle)){
$buffer=fgets($handle);
if(strpos($buffer,$searchFor)!==FALSE)
$matches[]=$buffer;
}
fclose($handle);
}
这是basic.lib
文件:
Sum: start
Sum: op1 =
Sum: op2 +
Sum: op *
Sum: end
Sub: start
Sub: op1 =
Sub: op2 -
Sub: end
上面的php代码有助于检索具有子字符串sum
但是我想将basic.lib
文件重新设计为:
Sum:start
output 1: Hello
output 2: world
Sum:end
Sub:start
output 1: Hello
output 2: Again
Sub:end
那么现在如何在$matches
数组中选择Sum:start和Sum:end之间的行呢
提前感谢您可以将文本文件拆分为数组,并检查每个元素中的特定字符串:
$filename = "txtfile.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$arr = explode(PHP_EOL, $contents);
foreach ($arr as $key => $value) {
if (strpos($value, ':start') !== false || strpos($value, ':end') !== false) {
unset($arr[$key]);
}
}
$arr = array_values($arr);
print_r($arr);
输出为:
Array
(
[0] => output 1: Hello
[1] => output 2: world
)
具有
文件
功能的简单解决方案:
$arr = file("assets/lib/basic.lib");
$capture = false;
$needed_lines = [];
foreach ($arr as $line) {
if (strpos($line, "Sum:start") !== false){
$capture = true;
continue;
} elseif (strpos($line, "Sum:end") !== false) {
$capture = false;
}
if ($capture){
$needed_lines[] = $line;
}
}
var_dump($needed_lines);
// the output:
array (size=2)
0 => string 'output 1: Hello
' (length=17)
1 => string 'output 2: world
' (length=17)
向我们展示您已尝试的内容
Sum:end
行始终是结束(最后)行?我使用fgets
复制了文件的整行,并存储在$matches
中。将文件结构设置为sum:start
sum:op1=
,sum:op2+
。但我认为上述问题中提到的结构会更可行@Epodax@RomanPerekhrestsum:end
始终是sum
块的结束行。另一个块的开头类似于subtract:start
。就像@Epodax所说的,向我们展示您的尝试!你的评论只是第一步,但还是有点混乱。请编辑您的问题并提供一些原始代码。那我们当然可以帮忙!谢谢你的回复。请检查上面更新的问题。我试着澄清需要感谢,这是我想要的方式。只需使用$searchFor:start