The PHP language has grown somewhat organically, so the naming of functions is haphazard in parts. Many of the different formats are retained for backwards-compatibility reasons.
A slight digression, but in addition to the issues with function naming, another unfortunate side-effect of the organic growth of the language is an apparent inconsistency in argument ordering, e.g. consider the functions in_array and strstr:
bool in_array (mixed $needle, array $haystack [, bool $strict])
string strstr (string $haystack, mixed $needle [, bool $before_needle=false])
Funnily enough, PHP seems to be internally consistent with these orderings in that all string functions seem to use $haystack, $needle
while array functions are the other way around, but this can take a bit of getting used to for someone new to PHP. There's a good post on ExpressionEngine talking about this particular quirk in more detail, as well as a discussion on the PHP bugs list.
As the language matures, there are various attempts to implement a more rigid and consistent naming convention - from the Zend Framework Documentation:
Function names must always start with a lowercase letter. When a function name consists of more than one word, the first letter of each new word must be capitalized. This is commonly called "camelCase" formatting.
filterInput()
getElementById()
For a slightly different take, from 20 possible reasons why PHP function names and parameters are weird:
PHP glues APIs and humans together, and sometimes this gets messy
PHP functions have been developed under many circumstances, sometimes drunk
PHP function naming algorithm still remains a secret and cannot be cracked
PHP chose to give people something fun to complain/blog/laugh about
PHP has other problems to solve