- implode: documentation ( source)
- array_fill_keys: documentation ( source)
- usort: documentation ( source)
- range: documentation ( source)
- str_split: documentation ( source)
<?php
$chars = '6Ata7~58jh&*(*HLy^)&a[yjJ>8]G8,$9<Y;B:%^';
$lookup = array_fill_keys(range('a', 'z'), 0) + array_fill_keys(range('A', 'Z'), 1) + array_fill_keys(range(0, 9), 2);
$array = str_split($chars);
usort($array, fn($a, $b) => ($lookup[$a] ?? 3) <=> ($lookup[$b] ?? 3));
echo implode($array);