爆炸和in_Array搜索不起作用

时间:2011-02-18 10:58:39

标签: php

好的,这里是代码键盘http://codepad.org/ZQz0Kn3R

function processContent($content, $min_count = 2, $exclude_list = array()) {
    $wordsTmp = explode(' ', str_replace(array('(', ')', '[', ']', '{', '}', "'", '"', ':', ',', '.', '?'), ' ', $content));
    $words = array();
$wordsTmp2 = array();
$omit = array('and', 'or', 'but', 'yet', 'for', 'not', 'so', '&', '&', '+', '=', '-', '*', '/', '^', '_', '\\', '|');
if(count($exclude_list)>0){
    $omit = array_merge($omit, $exclude_list);
}
foreach ($wordsTmp as $wordTmp) {
   if (!empty($wordTmp) && !in_array($wordTmp, $omit) && strlen($wordTmp) >= $min_count) {
             $words[] = $wordTmp;
    }
}
return $words;
}

好的,这是我的函数,它应该通过从$omit变量中过滤来返回单词数组。但是当我使用它时,第一个$omit数组中的单词只会被过滤,而$exclude_list中合并的第二个单词不会被过滤。

我以这种方式使用我的功能:

$filter_array = explode("\n", words list separated by \n new line here);
print_r(processContent('String gere for filtering', $min_word_length, $filter_array));

传递给exclude_list的变量$filter_array也被合并为省略变量,但不会在返回值中被过滤。仅过滤了第一个$omit值。代码中有什么问题吗?

2 个答案:

答案 0 :(得分:1)

问题是因为$filter_array中有空格。之一:

$filter_array = array_map(function($el) { return trim($el); }, $filter_array);

或者

foreach ($filter_array as &$element) {
    $element = trim($element);
}

答案 1 :(得分:0)

http://codepad.viper-7.com/BrZ9Rm

你需要通过修剪传递它:

$filter_array = array_map(function($el) { return trim($el); }, $filter_array);