Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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_Line - Fatal编程技术网

Php 我怎样才能大海捞针,把整条线都显示出来呢?

Php 我怎样才能大海捞针,把整条线都显示出来呢?,php,line,Php,Line,我怎样才能大海捞针,把整条线都显示出来呢 log.txt: 日志#5731:JohnDoe逮捕了JaneDoe 日志#5732:DonDoe逮捕了JaneDoe 我想搜索“JohnDoe”并显示整行内容日志#5731:JohnDoe逮捕了JaneDoe 另外,如果一个人有多个日志,我想全部显示出来,你可以用换行符分解文本。 然后使用array\u search方法搜索所需内容,并在数组中保留该元素的键 但是,如果您的日志很大(大多数日志都是这样),我不建议使用第一种解决方案,因为整个日志都必须加

我怎样才能大海捞针,把整条线都显示出来呢

log.txt:

日志#5731:JohnDoe逮捕了JaneDoe

日志#5732:DonDoe逮捕了JaneDoe

我想搜索“JohnDoe”并显示整行内容
日志#5731:JohnDoe逮捕了JaneDoe


另外,如果一个人有多个日志,我想全部显示出来,你可以用换行符分解文本。 然后使用
array\u search
方法搜索所需内容,并在数组中保留该元素的键

但是,如果您的日志很大(大多数日志都是这样),我不建议使用第一种解决方案,因为整个日志都必须加载并放入一个数组中。这会消耗大量的资源

我宁愿喜欢

<?php
$logfilepath = 'path/to/log.txt';

function searchLog($logfilepath, $searchQuery) {
    $fileresource = fopen($logfilepath, 'r');
    while (($buffer = fgets($handle)) !== false) {
        //now search in buffer
        if(strpos($buffer, $searchQuery) !== false) {
            return $buffer;
        }
    }
}

如果数据源是一个文件,“整行”的定义是一个换行分隔符,我将使用它将数据分解成一个数组,然后循环遍历它:

function findLines($file_path, $needle) {
   $file_lines = file($file_path);
   foreach($file_lines as $line) {
      if(strpos($line, $needle) !== false) {
          $matching_lines[] = $line;
      }
   }
   return $matching_lines;
}

$needle = 'JohnDoe';
$log_entries = findLines('/path/to/log.txt', $needle);

迭代所有行并显示
/JohnDoe/
是否匹配?
function findLines($file_path, $needle) {
   $file_lines = file($file_path);
   foreach($file_lines as $line) {
      if(strpos($line, $needle) !== false) {
          $matching_lines[] = $line;
      }
   }
   return $matching_lines;
}

$needle = 'JohnDoe';
$log_entries = findLines('/path/to/log.txt', $needle);