【问题标题】:Filter array in PHP using keywords?使用关键字过滤PHP中的数组?
【发布时间】:2012-02-09 03:32:18
【问题描述】:

我可以在以下代码中添加什么来使用数组中的关键字过滤返回的结果?

发送关键字和进行函数调用的代码在 Javasript 中。

下面的代码打开一个文件,使用请求获取一个指针,打开文件找到指针,并检索从指针到文件末尾的所有日志行。然后它将其格式化为 JSON 对象并发送回 Javacript。

function tail(){
    $keywords = json_decode($_REQUEST['keywords']);

    $file = "/path/to/the/log.log";
    $handle = fopen($file, "r");
    clearstatcache();       

    if ($_REQUEST['pointer'] == '') {
        fseek($handle, -1024, SEEK_END);
    } else {
        fseek($handle, $_REQUEST['pointer']);
    }

    while ($buffer = fgets($handle)) { 
        $log .= $buffer . "<br />\n";
    } 



    $output = array("pointer" => ftell($handle), "log" => $log);
    fclose($handle);

    echo json_encode($output);
}

请告诉我如何使用关键字数组中的关键字过滤检索到的数据。

【问题讨论】:

  • “按关键字过滤”是什么意思?您想查看日志的某一行是否包含某个单词?
  • 是...如果收到的行包含任何关键字,那么我想保留该行并丢弃任何其他不包含任何关键字的行。

标签: php javascript arrays filter


【解决方案1】:

您可以在每个空格上拆分行并根据提供的关键字检查每个单词:

while ($buffer = fgets($handle)) { 
  $words = explode(' ', $buffer);
  foreach ($words as $word) {
    if (in_array($word, $keywords)) {
      $log .= $buffer . "<br />\n";
      break;
    }
  }
}

或对照阅读行检查每个关键字:

while ($buffer = fgets($handle)) { 
  foreach ($keywords as $keyword) {
    if (strstr($buffer, $keyword)) {
      $log .= $buffer . "<br />\n";
      break;
    }
  }
}

【讨论】:

    【解决方案2】:

    将您的读取循环更改为:

    while ($buffer = fgets($handle)) { 
        foreach ($keywords as $kw) { // Loop keywords
            if (strpos($buffer, $kw) !== FALSE) { // Search for this keyword
                // If we get here, we found a keyword
                $log .= $buffer . "<br />\n";
                break;
            }
        }
    } 
    

    如果您想以不区分大小写的方式进行匹配,您可以改用stripos()

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多