Wildcards na pesquisa de matrizes

É possível usar curingas com array_search? Quero procurar parte de uma string e depois

algo como (com um asterisco)

print $pos = array_search('abitofastring%', $vars['myarray']); unset($vars['myarray'][$pos]); 

É possível usar curingas com array_search ?

Não, mas você pode usar expressões regulares (que suporta curingas) e a function preg_grep .

Exemplo:

 $array = explode(',', "House,Car,Boat,Horse,Pool Boy"); # remove all strings from array that do not contain "ho" $array = preg_grep('~ho~i', $array, PREG_GREP_INVERT); 

A matriz é então:

 Array ( [1] => Car [2] => Boat [4] => Pool Boy ) 

Como pode ser complicado escrever padrões de expressão regulares, pode ser útil ter uma function auxiliar que converta seu padrão SQL LIKE em uma expressão regular para que isso possa ser mais facilmente usado:

 $array = explode(',', "House,Car,Boat,Horse,Pool Boy"); # Search for "Ho" at the beginning of each string $regex = like_to_regex('Ho%'); $array = preg_grep($regex, $array, PREG_GREP_INVERT); print_r($array); /** * convert a MySQL LIKE pattern into a pcre pattern */ function like_to_regex($like, $casesensitive = FALSE, $escapechar = '\\') { $pattern = sprintf('~(?< !%1$s)(%1$s{2}|%%|_)~', preg_quote($escapechar)); $tokens = preg_split($pattern, $like, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); foreach($tokens as &$token) { switch($token) { case $escapechar.$escapechar: $token = preg_quote($escapechar); break; case '_': $token = '.'; break; case '%': $token = '.*'; break; default: $token = preg_quote($token); } } return sprintf('~^%s$~%s', implode('', $tokens), $casesensitive ? '':'i'); }