Когда я использую sort($topics) я получаю что-то вроде:
В этом примере «трава» начинается с нижнего регистра g, но заканчивается после «Зебры» с большой буквы.
Как сделать так, чтобы он сортировал его там, где он игнорирует, начинается ли слово с капиталов или нет?
Вызовите usort() как usort($topics, 'strnatcasecmp') .
strcasecmp тоже strcasecmp бы эту работу, но strnatcasecmp также будет корректно сортироваться, когда у вас есть номера в вашей строке.
Существует natcasesort .
natcasesort($topics);