<?php
$numbers = [1, 15, 3, 9800, 9, 76, 45, 9];
$arr = [];
$maxLength = max(array_map('strlen', $numbers));
foreach ($numbers as $number) {
$key = str_pad((string) $number, $maxLength, $number);
$arr[$key] = array_key_exists($key, $arr) ? $arr[$key].$number : $number;
}
ksort($arr);
$arr = array_reverse($arr);
var_dump(implode('', $arr));
Алгоритм:
Сравниваем цифры в числе одно за другим. При первом же несовпадении число с большей цифрой ставится влево:
45 36 => 4534
4 > 6 // первое число ставится влево
928 998 => 998928
9 = 9
2 < 9 // второе число ставится влево
Это если их длины равны. Если нет, то просто начинаем сравнение с начала:
456 4
4 = 4
5 > 4 // начинаем сравнивать с начала, первое число ставится влево
928 92
9 = 9
2 = 2
8 < 9 // начинаем сравнивать с начала, второе число ставится влево
Думаю непонятно объяснил, но что поделать