I would use this solution:
1- select all strings from the database order by length of the string.
2- loop through my db strings and replace them in the user input. if the string changes I update the oringal string, and I add the id of the one I am in to the found array.
$found_phrase=array();
$string=strtolower('AwordThatsNOTinDB I go to school AwordThatsNOTinDB with my dog named Gogo every day except weekends AwordThatsNOTinDB');
// LIMIT DB-SEARCH
$string=preg_replace('!\s+!', ' ', $string); // replace multiple spaces with one space
$where=explode(" ",$string);
foreach($where as $whereVal){
$whereQuery=$whereQuery." phrase LIKE '%".$whereVal."%' OR";
}
$whereQuery=rtrim($whereQuery,"OR"); // delete last OR
$whereQuery="WHERE ".$whereQuery." ";
$query=$conn->prepare("SELECT id, phrase FROM table $whereQuery ORDER BY length(phrase) DESC");
$query->execute();
while($array=$query->fetch(PDO::FETCH_ASSOC)){
$new_string=str_replace(strtolower($array['phrase']), "[{$array['id']}]", $string);
if($new_string!=$string){
$string=$new_string;
}
}
$string=preg_replace('/([A-Z0-9,.]){1,} /i', ' Not-Found ', $string);
$string=preg_replace('/\[([0-9])*\]/i', str_replace(array('[',']'), '',"$1"), $string);
$string_array=explode(' ', $string);
print_r($string_array);