Llevo más de 15 años programando en PHP y todavía tengo que hacer un esfuerzo consciente en recordar el orden de los parámetros en todas las funciones de búsqueda diversas y variadas, porque en unas lo que buscas va delante, y en otras el primer argumento es dónde lo buscas.
bool in_array ( mixed$needle
, array$haystack
[, bool$strict
=FALSE
] )
bool array_key_exists ( mixed$key
, array$array
)
mixed strpos ( string$haystack
, mixed$needle
[, int$offset
= 0 ] )
string strstr ( string$haystack
, mixed$needle
[, bool$before_needle
= false ] )
int preg_match ( string$pattern
, string$subject
[, array&$matches
[, int$flags
= 0 [,int$offset
= 0 ]]] )
De locos. Obsérvese
preg_match
y compárese con strpos
, por ejemplo. La cadena sobre la que se busca en cada función es un argumento diferente. Hay que memorizar cada caso por separado, porque no hay una regla aparente.