2013-08-16 6 views
0

Я пишу код для байесовского фильтра. Для определенного слова, я хочу проверить, находится ли слово в списке стоп-слов или нет, я заполняю список стоп-слов из файла на моем компьютере. Поскольку я должен сделать это для многих слов, я не хочу снова и снова читать файл StopWord с моего компьютера.php Прочитать содержимое файла в статическом массиве

Я хочу сделать что-то вроде этого

function isStopWord($word){ 

     if(!isset($stopWordDict)) 
     { 
      $stopWords = array(); 
      $handle = fopen("StopWords.txt", "r"); 
      if($handle) 
      { 
       while(($buffer = fgets($handle)) != false) 
       { 
        $stopWords[] = trim($buffer); 
       } 
      } 
      echo "StopWord opened"; 
      static $stopWordDict = array(); 
      foreach($stopWords as $stopWord) 
       $stopWordDict[$stopWord] = 1; 
     } 

     if(array_key_exists($word, $stopWordDict)) 
      return true; 
     else 
      return false; 
    } 

Я думал, с помощью статической переменной будет решить эту проблему, но это не так. Незлая помощь.

+0

Является ли эта функция вызывается в цикле или является страницей, на которой она просто выполняется? –

ответ

0

Поместите статическую декларацию в начале функции:

function isStopWord($word){ 
    static $stopWordDict = array(); 
    if(!$stopWordDict) 
    { 
     $stopWords = file("StopWords.txt"); 
     echo "StopWord opened"; 
     foreach($stopWords as $stopWord) {   
      $stopWordDict[trim($stopWord)] = 1; 
     } 
    } 

    if(array_key_exists($word, $stopWordDict)) 
     return true; 
    else 
     return false; 
} 

Это будет работать, так как пустой массив считается falsy.

Смежные вопросы