Давайте разбираться.
У нас есть две сортировки. Сначала мы должны отсортировать по ключам, что бы добиться нужного порядка записи для случаев, когда у нас идет одинаковое количество вхождений строк для разных слов, а затем уже сортировать по количеству вхождений. Тут важно заметить что порядок сортировки обратный, от большего к меньшему. Учитывая это напишем такой вот простенький код:
$arr = [
'a1' => 2,
'a2' => 1,
'a4' => 5,
'a3' => 5,
'a5' => 7
];
ksort($arr);
arsort($arr);
var_dump($arr == [
'a5' => 7,
'a3' => 5,
'a4' => 5,
'a1' => 2,
'a2' => 1,
]); // true
На вскидку не смог придумать ситуаций когда arsort сделает лишние перестановки.