Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在两个模式之间复制文件行并在PHP中存储在数组中_Php - Fatal编程技术网

如何在两个模式之间复制文件行并在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;

我当前的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;
    }
    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:startSum: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@RomanPerekhrest
sum:end
始终是
sum
块的结束行。另一个块的开头类似于
subtract:start
。就像@Epodax所说的,向我们展示您的尝试!你的评论只是第一步,但还是有点混乱。请编辑您的问题并提供一些原始代码。那我们当然可以帮忙!谢谢你的回复。请检查上面更新的问题。我试着澄清需要感谢,这是我想要的方式。只需使用
$searchFor:start