Option 1 – change the way you create the array
You can’t do this without either a linear search or altering the original array. The most efficient approach will be to use strtolower on keys when you insert AND when you lookup values.
$myArray[strtolower('SOmeKeyNAme')]=7;
if (isset($myArray[strtolower('SomekeyName')]))
{
}
If it’s important to you to preserve the original case of the key, you could store it as a additional value for that key, e.g.
$myArray[strtolower('SOmeKeyNAme')]=array('SOmeKeyNAme', 7);
Option 2 – create a secondary mapping
As you updated the question to suggest this wouldn’t be possible for you, how about you create an array providing a mapping between lowercased and case-sensitive versions?
$keys=array_keys($myArray);
$map=array();
foreach($keys as $key)
{
$map[strtolower($key)]=$key;
}
Now you can use this to obtain the case-sensitive key from a lowercased one
$test="somekeyname";
if (isset($map[$test]))
{
$value=$myArray[$map[$test]];
}
This avoids the need to create a full copy of the array with a lower-cased key, which is really the only other way to go about this.
Option 3 – Create a copy of the array
If making a full copy of the array isn’t a concern, then you can use array_change_key_case to create a copy with lower cased keys.
$myCopy=array_change_key_case($myArray, CASE_LOWER);