Фильтровать массив в PHP по ключевым словам? - PullRequest
0 голосов
/ 13 января 2012

Что можно добавить к следующему коду для фильтрации возвращаемых результатов по ключевым словам в массиве?

Код, который отправляет ключевые слова и выполняет функцию вызова, находится в 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);
}

Пожалуйста, скажите мне, как я могу фильтровать полученные данные, используя ключевые слова в массиве ключевых слов.

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Вы можете разбить строку на каждом пробеле и проверить каждое слово по предоставленным ключевым словам:

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;
    }
  }
}
1 голос
/ 13 января 2012

Измените цикл чтения следующим образом:

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() вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...