2012-01-12 2 views
0

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

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

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

+0

Что вы имеете в виду под «фильтрацией по ключевым словам "? Вы хотите узнать, содержит ли строка журнала в нем определенное слово? –

+0

Да ... Если полученная строка содержит любое из ключевых слов, я хочу сохранить эту строку и отбросить любые другие строки, которые не содержат ни одного из ключевых слов. – amlane86

ответ

2

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

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

Измените цикл чтения этого:

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().