Немного экспериментов показывает, что собственные функции phps не сохраняют эту неопределенность.
function noopa( $a ){ return $a; }
$arr = array_map('noopa', $arr );
$arr[0]; # no error!
По сути, это просто создает копию массива, и исправление происходит во время копирования.
В конечном счете, это ошибка проектирования по всем направлениям, попробуйте использовать array_merge так, как вы думаете, он работает с массивом со смешанными числовыми и строковыми ключами?
Все пронумерованные элементы копируются, а некоторые - нумеруются, даже если некоторые просто являются числами с инкапсуляцией строк, и в результате существуют десятки реализаций home_brew для array_merge только для решения этой проблемы.
Когда php попытался создать клон perl и потерпел неудачу, они не поняли концепцию массивов и хешей как отдельных концепций, а вместо этого объединили их в один универсальный зонт. Хорошо идет!.
В следующем уловке им удалось сломать разделители пространства имен из-за какой-то технической проблемы, с которой по какой-либо причине не столкнулся ни один другой язык.