2016-11-23 101 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