2016-11-23 129 views
0

好吧,我現在已經完成了所有代碼的過濾,但是我想要過濾超過100個關鍵字。我沒有足夠的經驗,我已經嘗試失敗。PHP按關鍵字篩選

這是我目前的代碼,但我想修改它使用多個關鍵字。

function postResolve ($key) { 
    return isset($_POST[$key]) ? $_POST[$key] : null; 
} 

$formData = [ 
    'keyword' => postResolve('keyword'), 
    'text' => postResolve('text') 
]; 

if (is_null($formData['keyword']) || is_null($formData['text'])) { 
    return 'Nothing to do... Missing text or keyword.'; 
} 

$text = explode(PHP_EOL, $formData['text']); 

$storage = []; 

foreach ($text as $sentence) { 
    if (strpos($sentence, $formData['keyword']) !== false) { 
     $storage[] = trim($sentence); 
    } 
} 

echo json_encode($storage); 

將不勝感激,如果有人能夠給我一個手這一變化:)

+0

如果您使用PHP 7,isset($ _ POST [$ key])? $ _POST [$ key]:null'等於'$ _POST [$ key] ?? null' – Xorifelse

+0

我不是100%確定PHP是我迄今爲止最討厭的語言,我有一個朋友爲我做這件事。我只是修改它與引導工作。 – Dzje

+0

您可以使用in_array並將100多個關鍵字放在乾草堆中。 – Daerik

回答

1

我會建議使用的stripos()代替strpos()。與strpos()不同,stripos()不區分大小寫。把你的關鍵字當作一個數組。假設他們用逗號分隔:

<?php 
    function postResolve ($key) { 
     return isset($_POST[$key]) ? $_POST[$key] : NULL; 
    } 

    function checkKeywords($sentence, $keywords) { 
     foreach($keywords as $keyword) { 
      if(stripos($sentence, $keyword) !== FALSE) { return TRUE; } 
     } 
     return FALSE; 
    } 

    if(isset($_POST) && !empty($_POST)) { 

     $formData = array(
      'keywords' => postResolve('keywords'), 
      'text' => postResolve('text') 
     ); 

     if(is_null($formData['keywords']) || is_null($formData['text'])) { 
      echo 'Nothing to do... Missing text or keyword.'; 
     } 

     $text = explode(PHP_EOL, $formData['text']); 
     $keywords = explode(',', $formData['keywords']); 

     $storage = array(); 

     foreach($text as $sentence) { 
      if(checkKeywords($sentence, $keywords)) { 
       $storage[] = trim($sentence); 
      } 
     } 

     echo json_encode($storage); 
     exit(); 
    } 
?> 

<form> 
    <textarea name="keywords"></textarea> 
    <textarea name="text"></textarea> 
    <input type="submit" value="Submit"> 
</form> 
<div></div> 

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 
<script> 
    $('form').on('submit', function(event) { 
     event.preventDefault(); 
     $('div').load(location.href, $('form').serializeArray()); 
    }); 
</script> 
+0

因此,讓我們舉例說,我想過濾兩個關鍵字「07883,07886」,這兩個關鍵字之間用逗號隔開,這樣會起作用嗎? – Dzje

+0

07883,07886會起作用,除非您使用「,」作爲分隔符進行爆炸。您可以隨時使用逗號進行爆炸,並在逗號後有空格時使用array_map來修剪關鍵字。或者只是在PHP_EOL上爆炸,並將每個關鍵字放在一個新行上,就像您在做文本一樣。 – Daerik

+0

是的,沒有過濾,它只是導致過濾框返回空白:( – Dzje