// исходный массив, сортируем по ключу
$arr = ['1.2' => '1.2', '2' => '2', '1' => '1','1.1' => '1.1', '1.3' => '1.3', '1.10' => '1.10', '1.12' => '1.12', '2.11' => '2.11', '2' => '2', '2.1' => '2.1', '2.2' => '2.2'];
function cmp($a, $b){
// сначала простое сравнение. Если оба равны = возвращаем 0.
// если не равны, то сначала целые части
// потом десятичные
// Если одинаковое целое, но у одного из них нет десятичной части, то без десятичной - меньше.
// Если десятичные у обоих = сравниваем
if ($a == $b){
return 0;
} else {
$wholePartA = (integer)($a);
$wholePartB = (integer)($b);
if ($wholePartA > $wholePartB){
return 1;
} else if ($wholePartA < $wholePartB){
return -1;
} else {
if ( (strpos($a, '.') !== false) && (strpos($b, '.') !== false) ){
$fractA = substr($a, strpos($a,'.')+1);
$fractB = substr($b, strpos($b,'.')+1);
if ($fractA > $fractB){
return 1;
} else {
return -1;
}
} else {
if (strpos($a, '.') === false){
return -1;
} else if (strpos($b, '.') === false){
return 1;
}
}
}
}
}
uksort($arr, "cmp"); // пользовательская сортировка
Песочница