Я обнаружил, что встроенные функции намного быстрее, чем циклы при обработке больших массивов. Это может делать то, что вы хотите (непроверенный код):
$lowerCaseKeys = array_map('strtolower', array_keys($array));
$duplicates = array_filter(array_count_values($lowerCaseKeys), create_function('$count', 'return $count > 1;'));
if (!empty($duplicates)) {
throw new Exception('duplicate keys found: ' . implode(',', array_keys($duplicates)));
}
# Recreate the array with lower-case keys
$array = array_combine($lowerCaseKeys, array_values($array));
РЕДАКТИРОВАТЬ Или прагматический подход (должен быть намного быстрее):
$lowerCaseKeyArray = array_change_key_case($array);
if (count($lowerCaseKeyArray) !== count($array)) {
# You can extract the duplicate keys here as above, if you like
throw new Exception('duplicate keys found!');
}