2-х мерный массив.. возможно ли с usort....

Kelkos

Сам себе программер
2-х мерный массив.. возможно ли с usort....

есть массивы плана:
Array
(
[0] => Array
(
[F1] => a
[F2] => 1
)

[1] => Array
(
[F1] => b
[F2] => 2
)

[2] => Array
(
[F1] => d
[F2] => 4
)

[3] => Array
(
[F1] => c
[F2] => 3
)

)

т.е. обычный 2-х мерный массив.. Ножно массивы такого плана сортировать по какому то полю. usort прекрасно работает, но только на пле, указанное уже в функции сортировки:
return (strtolower ($a['F1']) > strtolower ($b['F1'])) ? -1 : 1;
а хотелосьбы универсальности.. типа функция сортирующая по указанному полю.. и никак не удаётся передать имя поля для сортировки в функцию.. global не помогает.. лишние параметры не принимаюся.. Может вообще этим путём такое решение невозможно?
 

Fiva

Держу ZMH
а как ты пытаешься передавать имя поля в функцию?
 

Kelkos

Сам себе программер
ээхх.. вызываю:
usort ($db, 'sort_db_desc');
так в этой "sort_db_desc" надо брать поле для сортировки, чтобы можно было примерно так:
function sort_db_desc ($a, $b) {
if ($a[$field_name] == $b[$field_name]) return 0;
return ($a[$field_name] > $b[$field_name]) ? -1 : 1;
}
уж и незнаю как ещё объяснить.
вообщем, задача сводится к передаче дополнительной переменной в функцию, вызываемую usort

-~{}~ 19.05.05 15:58:

а как ты пытаешься передавать имя поля в функцию?
А как пытаюсь? хм.. да поразному.. всё равно ничего не получается.
 

StUV

Rotaredom
Kelkos
как вариант - можно массив впихнуть в класс, в котором и функция сортировки и дополнительные параметры будут мемберами
 

Kelkos

Сам себе программер
да проще самому написать сортировку однотипных массивов.. медленно, но хоть работает.. а с usort похоже дохлый номер. а жаль..
 

StUV

Rotaredom
чем проще?
самопальная сортировка на пыхе будет тормозить на больших массивах (по сравнению с usort)

сложно что-ли сделать над ассоциативным массивом надстройку (в виде класса) ?
 

Kelkos

Сам себе программер
хм.. получилось передать параметр.. почему то там не работает global , а суперглобальные массивы (типа $_POST или $_GET) нормально принимаются. странно. Может так и длжно быть?
 

rotoZOOM

ACM maniac
Kelkos если ты не хочешь работать с классами и писать свою сортировку, то вставляй в каждый элемент массива еще один, назови его например 'sort' и туда записывай имя поля по которому сортировать. Твой массив приобрете такой вид.
Array
(
[0] => Array
(
[sort] => F1
[F1] => a
[F2] => 1
)

[1] => Array
(
[sort] => F1
[F1] => b
[F2] => 2
)

[2] => Array
(
[sort] => F1
[F1] => d
[F2] => 4
)

[3] => Array
(
[sort] => F1
[F1] => c
[F2] => 3
)
)

Минусы - бОльшие расходы памяти, заполнение этого элемента 'sort'. Другими словами - это костыли.
 
Сверху