Сортировка записей по определенному ключу

Пример массива в первом посте крайне неудачен. В процессе работы функции, что находится в первом посте темы, образуется такой массив:

PHPВыделить код

1
2
3
4
5
6
7
8

Array
(
    [0] => 3
    [1] => 1
    [2] => 2
    [3] => 0
    [4] => 4
)

где в значениях содержатся те числа, что являются ключами в исходном массиве, и располагаются эти значения в том порядке, в котором должны на выходе следовать записи из исходного массива (т.е. сначала 3й, затем 1й и т.д.).

Если посмотреть внимательно, то в этом массиве все пары ключ=>значение имеют себе пару:

[0] => 3 и [3] => 0,

[1] => 1,

[2] => 2,

[4] => 4 сами себе.

Из-за этого далее в функции сортировки происходит "подмена понятий", из-за которой функция работает удачно только с тем массивом, который указан в первом посте. А на самом деле в функции содержится логическая ошибка, из-за которой в общем случае функция работает неправильно.

Добавлено через 48 минут

Проблема решена добавлением строк 5 и 6:

PHPВыделить код

1
2
3
4
5
6
7
8
9
10

function isort(&$a, $field, $dir = true) {
    $t = call_user_func_array('array_merge_recursive', $a);
    asort($t[$field]);
    $so = array_keys($t[$field]);
    asort($so);
    $so = array_keys($so);
 
    $a = array_combine($so, $a);
    $dir ? ksort($a) : krsort($a);
}

В первом посте функция также исправлена.

Добавлено через 1 минуту

Правда теперь функция выполняет последовательно три сортировки вместо одной.