-1

I am using the code below to identify authors in an array

foreach($authors as $key => $list){
    foreach($coauthors as $key => $co){
         $searchword = $list['author'];
            $matches = array_filter($co, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); });
                        if($matches){ // do something cool }

This code will match "bob, s" with "bob, s" from a list of authors but will not match to "bob, sm". However, "bob" will match with "bob, s".

I need this to work such that "author, i" matches everything that starts with these characters and not look for whole words as it seems to be doing at the moment i.e. it matches "author, ii" "author, iai" etc etc


EDIT

I have attached a screenshot of the output I am printing to the screen in the hope that it explains what I am trying to do. $authors is a list of authors that I am looping through trying to match to a list of coauthors. In the screenshot you can see that the author adam matches adam and adam, k in the two coauthor lists. This also works for adams and adams, ky but no match is shown for ahmed, m and ahmed, mp (ignore the last author)

enter image description here

EDIT

requested output. Warning this is huge and has a lot of missing data simply because I am using a small dataset for fixing this bug

searchword=adam, var=, rtn=NO MATCH searchword=adam, var=adam, rtn=MATCH searchword=adam, var=adams, rtn=NO MATCH searchword=adam, var=ahmed, m, rtn=NO MATCH searchword=adam, var=mazzoferro, v, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=1, rtn=NO MATCH searchword=adam, var=0, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=adam, k, rtn=MATCH searchword=adam, var=adams, ky, rtn=NO MATCH searchword=adam, var=ahmed, mp, rtn=NO MATCH searchword=adam, var=mazzoferro, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=2, rtn=NO MATCH searchword=adam, var=0, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=adam, rtn=NO MATCH searchword=adams, var=adams, rtn=MATCH searchword=adams, var=ahmed, m, rtn=NO MATCH searchword=adams, var=mazzoferro, v, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=1, rtn=NO MATCH searchword=adams, var=0, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=adam, k, rtn=NO MATCH searchword=adams, var=adams, ky, rtn=MATCH searchword=adams, var=ahmed, mp, rtn=NO MATCH searchword=adams, var=mazzoferro, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=2, rtn=NO MATCH searchword=adams, var=0, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=adam, rtn=NO MATCH searchword=ahmed, m, var=adams, rtn=NO MATCH searchword=ahmed, m, var=ahmed, m, rtn=MATCH searchword=ahmed, m, var=mazzoferro, v, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=1, rtn=NO MATCH searchword=ahmed, m, var=0, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=adam, k, rtn=NO MATCH searchword=ahmed, m, var=adams, ky, rtn=NO MATCH searchword=ahmed, m, var=ahmed, mp, rtn=NO MATCH searchword=ahmed, m, var=mazzoferro, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=2, rtn=NO MATCH searchword=ahmed, m, var=0, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=adam, rtn=NO MATCH searchword=mazzoferro, v, var=adams, rtn=NO MATCH searchword=mazzoferro, v, var=ahmed, m, rtn=NO MATCH searchword=mazzoferro, v, var=mazzoferro, v, rtn=MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=1, rtn=NO MATCH searchword=mazzoferro, v, var=0, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=adam, k, rtn=NO MATCH searchword=mazzoferro, v, var=adams, ky, rtn=NO MATCH searchword=mazzoferro, v, var=ahmed, mp, rtn=NO MATCH searchword=mazzoferro, v, var=mazzoferro, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=2, rtn=NO MATCH searchword=mazzoferro, v, var=0, rtn=NO MATCH

output after removing the trailing /b

searchword=adam, var=, rtn=NO MATCH searchword=adam, var=adam, rtn=MATCH searchword=adam, var=adams, rtn=MATCH searchword=adam, var=ahmed, m, rtn=NO MATCH searchword=adam, var=mazzoferro, v, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=1, rtn=NO MATCH searchword=adam, var=0, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=adam, k, rtn=MATCH searchword=adam, var=adams, ky, rtn=MATCH searchword=adam, var=ahmed, mp, rtn=NO MATCH searchword=adam, var=mazzoferro, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=, rtn=NO MATCH searchword=adam, var=2, rtn=NO MATCH searchword=adam, var=0, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=adam, rtn=NO MATCH searchword=adams, var=adams, rtn=MATCH searchword=adams, var=ahmed, m, rtn=NO MATCH searchword=adams, var=mazzoferro, v, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=1, rtn=NO MATCH searchword=adams, var=0, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=adam, k, rtn=NO MATCH searchword=adams, var=adams, ky, rtn=MATCH searchword=adams, var=ahmed, mp, rtn=NO MATCH searchword=adams, var=mazzoferro, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=, rtn=NO MATCH searchword=adams, var=2, rtn=NO MATCH searchword=adams, var=0, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=adam, rtn=NO MATCH searchword=ahmed, m, var=adams, rtn=NO MATCH searchword=ahmed, m, var=ahmed, m, rtn=MATCH searchword=ahmed, m, var=mazzoferro, v, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=1, rtn=NO MATCH searchword=ahmed, m, var=0, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=adam, k, rtn=NO MATCH searchword=ahmed, m, var=adams, ky, rtn=NO MATCH searchword=ahmed, m, var=ahmed, mp, rtn=MATCH searchword=ahmed, m, var=mazzoferro, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=, rtn=NO MATCH searchword=ahmed, m, var=2, rtn=NO MATCH searchword=ahmed, m, var=0, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=adam, rtn=NO MATCH searchword=mazzoferro, v, var=adams, rtn=NO MATCH searchword=mazzoferro, v, var=ahmed, m, rtn=NO MATCH searchword=mazzoferro, v, var=mazzoferro, v, rtn=MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=1, rtn=NO MATCH searchword=mazzoferro, v, var=0, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=adam, k, rtn=NO MATCH searchword=mazzoferro, v, var=adams, ky, rtn=NO MATCH searchword=mazzoferro, v, var=ahmed, mp, rtn=NO MATCH searchword=mazzoferro, v, var=mazzoferro, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=, rtn=NO MATCH searchword=mazzoferro, v, var=2, rtn=NO MATCH searchword=mazzoferro, v, var=0, rtn=NO MATCH
EnduroDave
  • 1,013
  • 7
  • 18
  • 37
  • 1
    can you please provide a sample input, sample query and sample output? – jvitasek Mar 24 '15 at 22:20
  • Can you show us part of your data structure? Apparently $authors contains a list - of what? – Peter Bowers Mar 24 '15 at 22:20
  • 1
    Remove the `\b` (word boundaries). Does it work now? Note that your question is hard to get. Mostly it is the best to give some examples data and show what should match and what not + plus the pattern you tried – hek2mgl Mar 24 '15 at 22:22
  • 1
    I'd really like to see $authors and $coauthors – Peter Bowers Mar 24 '15 at 22:57
  • Is `$co` really an array? So `$coauthors` is an array of arrays? – x-ray Mar 24 '15 at 23:00
  • yep. Far too much nesting but it works for what I need this to do – EnduroDave Mar 24 '15 at 23:02
  • $authors = `Array ( [0] => Array ( [id] => 1 [author] => adam [count] => ) [1] => Array ( [id] => 2 [author] => adams [count] => ) [2] => Array ( [id] => 3 [author] => ahmed, m [count] => ) [3] => Array ( [id] => 4 [author] => mazzoferro, v [count] => ) )` – EnduroDave Mar 24 '15 at 23:07

3 Answers3

1

Here is your code:

preg_match("/\b$searchword\b/i", ...

The \b before and after $searchword tell preg_match that there has to be a break in the word before and after. Remove them and it will match regardless of where words break.

preg_match("/$searchword/i", ...

EDIT - put in these changes and let us know what the output is

foreach($authors as $key => $list){
    foreach($coauthors as $key => $co){
         $searchword = $list['author'];
            $matches = array_filter($co, 
function($var) use ($searchword) { 
$rtn = preg_match("/\b$searchword/i", $var); 
echo "searchword=$searchword, var=$var, rtn=".($rtn?'MATCH':'NO MATCH')."<br />\n";
});
                        if($matches){ // do something cool }
Peter Bowers
  • 3,063
  • 1
  • 10
  • 18
  • Unfortunately this didn't make any difference :( – EnduroDave Mar 24 '15 at 22:38
  • Are you sure? You see how your regex should look in the 2nd example, right? I'm about 95% sure that should match what I'm thinking you are looking for... – Peter Bowers Mar 24 '15 at 22:50
  • yep, just tried this again and the exact same results – EnduroDave Mar 24 '15 at 22:52
  • OK, modify your code as above (putting trace statements in to show us the value of things) and tell what gets displayed... – Peter Bowers Mar 24 '15 at 22:59
  • output attached above – EnduroDave Mar 24 '15 at 23:25
  • Great - that confirmed what I would expect with the \b in place - can you now remove the \b and attach the output again? (keep them separate so we can compare the output from the 2) – Peter Bowers Mar 24 '15 at 23:30
  • sorry for the delay. Output attached – EnduroDave Mar 26 '15 at 19:32
  • In that test data that you posted, what did you *hope* to match that did not match? In the 2nd example (without the `\b`) `searchword=ahmed, m` DOES match `var=ahmed, mp` - that was what you were hoping for, right? – Peter Bowers Mar 26 '15 at 19:41
  • Line 210 shows the match that I thought you were looking for: `searchword=ahmed, m, var=ahmed, mp, rtn=MATCH` -- maybe I am misunderstanding fundamentally what you are looking for... – Peter Bowers Mar 26 '15 at 19:49
  • Peter you are correct. This is the correct output. The problem was not in the backend code but in the non-updating UI where I had another bug! Thanks so much for your help. I will mark your answer as correct – EnduroDave Mar 26 '15 at 19:51
  • Shew! I thought I was going crazy ever since the 2nd comment on this answer... :-) Glad you got it sorted. – Peter Bowers Mar 26 '15 at 20:23
1

This might be what you are looking for:

foreach($authors as $list) {
    $searchword = $list['author'];
    foreach($coauthors as $co) { 
        $matches = array_filter($co, function($var) use ($searchword) {
            return strncasecmp($searchword, $var, strlen($searchword)) == 0;
        });
        if ( ! empty($matches)) {
            // do something cool
        }
    }
}

From the PHP manual: strncasecmp — Binary safe case-insensitive string comparison of the first n characters

What this does is: For each combination of $list['author']-value and $co-array, $matches will get populated with all the (string-)elements in $co that start with the value of $list['author'] (case insensitive compare). Note that $matches will be overwritten in every loop.


Update: I just did the following test:

$authors = array(array('author' => 'ahmed, m'));
$coauthors = array(array('ahmed, m', 'ahmed, mp'));
$allMatches = array();
foreach($authors as $list) {
    $searchword = $list['author'];
    foreach($coauthors as $co) { 
        $matches = array_filter($co, function($var) use ($searchword) {
            return strncasecmp($searchword, $var, strlen($searchword)) == 0;
        });
        if ( ! empty($matches)) {
            $allMatches[] = $matches;
        }
    }
}
var_dump($allMatches);

This gives this result:

array (size=1)
  0 => 
    array (size=2)
      0 => string 'ahmed, m' (length=8)
      1 => string 'ahmed, mp' (length=9)

So ahmed, mp IS matched by ahmed, m.

x-ray
  • 3,279
  • 5
  • 24
  • 37
  • This has no effect on my output. The out put is unchanged from the screenshot – EnduroDave Mar 24 '15 at 23:13
  • no, sorry. the screenshot is the output I have. The problem is that the 3rd author ahmed, m needs to match with ahmed, mp and dosnt – EnduroDave Mar 24 '15 at 23:17
  • Just tested this and it looks like `ahmed, m` does match `ahmed, mp`. See updated answer. – x-ray Mar 24 '15 at 23:37
  • This does work. I havent marked as correct simply because someone else got there first with a smaller tweak to my code. Thanks all the same – EnduroDave Mar 26 '15 at 19:52
0

There is no need to use preg_match(). You can write proper function with strpos();

Check this out:

 $haystack = array('abcde', 'adsfzvabcde', 'bcde', 'abasdfasd', 'cdefg');
 $searchWord = 'ab';
 $matches = array_filter($haystack, function($haystack) use ($searchWord){
     return $searchWord === "" || strrpos($haystack, $searchWord, -strlen($haystack)) !== FALSE;
 });
 print_r($matches);

It will find all string which starts with $searchWord

Output will be:

Array ( [0] => abcde [3] => abasdfasd )

Answer is based on this function

Community
  • 1
  • 1
Robert
  • 19,800
  • 5
  • 55
  • 85
  • this code is not working for me as I am using this inside of a foreach loop and so my $co (or your $haystack) comes back as an undefined error – EnduroDave Mar 24 '15 at 22:50