(PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
Locale::lookup -- locale_lookup — Searches the language tag list for the best match to the language
Object oriented style
$langtag
   , string $locale
   [, bool $canonicalize = false
   [, string $default
  ]] )Procedural style
$langtag
   , string $locale
   [, bool $canonicalize = false
   [, string $default
  ]] )
   Searches the items in langtag for the best match to 
   the language range specified in locale according to
   RFC 4647's lookup algorithm. 
  
langtag
       An array containing a list of language tags to compare to 
       locale. Maximum 100 items allowed.
      
localeThe locale to use as the language range when matching.
canonicalize
       If true, the arguments will be converted to canonical form before matching.
defaultThe locale to use if no match is found.
The closest matching language tag or default value.
Example #1 locale_lookup() example
<?php
$arr = array(
    'de-DEVA',
    'de-DE-1996',
    'de',
    'de-De'
);
echo locale_lookup($arr, 'de-DE-1996-x-prv1-prv2', true, 'en_US');
?>
Example #2 OO example
<?php
$arr = array(
    'de-DEVA',
    'de-DE-1996',
    'de',
    'de-De'
);
echo Locale::lookup($arr, 'de-DE-1996-x-prv1-prv2', true, 'en_US');
?>
The above example will output:
de_de_1996