erdomester
erdomester

Reputation: 11829

Filter the values in a flat array using a regular expression

I have an array of words and an array of stopwords. I want to remove those words from the array of words that are in the stopwords array, but the code returns all words:

function stopwords($x){
      return !preg_match("/^(.|a|car|red|the|this|at|in|or|of|is|for|to)$/",$x);
    };

$filteredArray = array_filter($wordArray, "stopwords");

Why?

Upvotes: 0

Views: 123

Answers (3)

Yahoo - Jungly
Yahoo - Jungly

Reputation: 75

Try this..

    $words = array('apple','boll','cat','dog','elephant','got');
        $stopwords = array('cat','apple');

       foreach($words as $k=>$v)
        {
        if(in_array($v,$stopwords)){
            unset($words[$k]);  
        }

      }
print_r($words);

Upvotes: 0

Anil Prz
Anil Prz

Reputation: 1139

// Should be an Array
$wordArray = array('he', 'is', 'going', 'to', 'bed' );

// Should return boolean
function stopwords ($x)
{
return !preg_match("/^(.|a|car|red|the|this|at|in|or|of|is|for|to)$/",$x);
}

//filter array
$filter = array_filter($wordArray, "stopwords");

// Output
echo "< pre>";
print_r($filter);

// Result
Array
(
[0] => he
[2] => going
[4] => bed
)

Upvotes: 0

Alister Bulman
Alister Bulman

Reputation: 35139

$wordArray = ["hello","red","world","is"];

function stopwords($x){
      return !preg_match("/^(.|a|car|red|the|this|at|in|or|of|is|for|to)$/",$x);
    };

$filteredArray = array_filter($wordArray, "stopwords");
var_dump($filteredArray);

# results out:
array(2) {
   [0] =>   string(5) "hello"   
   [2] =>   string(5) "world"
}

What do you think it was going to return?

Is your input '$wordArray' a string, or an array?

Upvotes: 1

Related Questions