echo ${!${false}=getArray()}[0];
Вот как это работает, шаг за шагом
${false}=getArray()
присваивает результат getArray переменной с пустым именем ('' или ноль будет работать вместо false)
!${false}=getArray()
отменяет указанное выше значение, превращая его в логическое значение false
${!${false}=getArray()}
преобразует предыдущее (ложное) значение в (пустую) строку и использует эту строку в качестве имени переменной. То есть это переменная из шага 1, равная результату getArray.
${!${false}=getArray()}[0];
принимает индекс этой «пустой» переменной и возвращает элемент массива.
Еще несколько вариаций той же идеи
echo ${1|${1}=getArray()}[1];
echo ${''.$Array=getArray()}[1];
function p(&$a, $b) { $a = $b; return '_'; }
echo ${p($_, getArray())}[1];
Относительно того, почему getArray()[0]
не работает, это потому, что команда php понятия не имеет, как заставить его работать.