72

Possible Duplicate:
Remove item from array if it exists in a 'disallowed words' array

I have a dynamic string that clients will send and I want to create comma delimited tags from it:

$subject = "Warmly little in before cousin as sussex and an entire set Blessing it ladyship.";
print_r($tags = explode(" ", strtolower($subject)));

And yet, I want to delete a specific group of words (such as definite articles), but I want to delete the key and value of that word if it is in the exploded array:

$definite_articles = array('the','this','then','there','from','for','to','as','and','or','is','was','be','can','could','would','isn\'t','wasn\'t', 'until','should','give','has','have','are','some','it','in','if','so','of','on','at','an','who','what','when','where','why','we','been','maybe','further');

If one of these words in the $definite_article array are in the $tags array delete the key and value of that word and the new array will have these words taken out. I will have this array be used by array_rand to have a random group of words chosen out of it. I've tried many things to achieve my result, but nothing so far. Can someone help me find a resolve to this?

Community
  • 1
  • 1
Tower
  • 1,287
  • 3
  • 15
  • 25

2 Answers2

101

You are looking for array_diff:

$subject = "Warmly little in before cousin as sussex...";
$tags = explode(" ", strtolower($subject));

$definite_articles = array('the','this','then','there','from','for','to','as');

$tags = array_diff($tags, $definite_articles);
print_r($tags);

See it in action.

Jon
  • 428,835
  • 81
  • 738
  • 806
55

Sounds like an easy job for array_diff().

array array_diff ( array $array1 , array $array2 [, array $... ] )

Compares array1 against array2 and returns the difference.

Which basically means it will return array1 after it's been stripped of all values which exist in array2.

Madara's Ghost
  • 172,118
  • 50
  • 264
  • 308
  • `array_diff()` will retain the original array keys [of `array1`], which is what makes this statement true. You may or may not want this, but it is just something to be aware of. – Jason May 31 '15 at 09:55
  • 3
    array_diff() will retain the original array keys [of array1] - just wrap it in array_values - this will reset new array keys: Example: $new_array=array_values(array_diff($array1, $array2)); – realmag777 Jan 04 '18 at 15:57