Сортировка динамического массива (двумерного)

Nemozar

Новичок
Сортировка динамического массива (двумерного)

Всем привет. Возникла проблема с сортировкой...

У меня есть двемерный массив (строки и столбцы динамически задаются).

Сортировку делаю функцией

PHP:
array_multisort($tbl[0], SORT_ASC, $tbl[1],$tbl[2]);
(сортирую по строкам)

и вот тут возникает проблема. Если динамическое кол во строк, то перечисляемый список строк будет всегда разный. Как его можно реализовать средствами ПХП?

допустим
$tbl[1],$tbl[2]
$tbl[1],$tbl[2],$tbl[3],$tbl[4]

и т.д.

Заранее благодарен.
 

Фанат

oncle terrible
Команда форума
Вопрос непонятен абсолютно.
что такое перечисляемый список?
при чем тут сортировка?
 

Nemozar

Новичок
сортировка идет по одной строке $tbl[0], а все остальные сортируются прицепом $tbl[1],$tbl[2]

но у меня может быть разное количество строк... и поэтому в функцию надо передавать разное кол.во параметров.

array_multisort($tbl[2],SORT_ASC,$tbl[0],$tbl[1],SORT_DESC);
array_multisort($tbl[2],SORT_ASC,$tbl[1],$tbl[2],$tbl[3],$tbl[4],SORT_DESC);

-~{}~ 07.02.09 13:29:

Я делаю сортировку таблицы... по определенной строке (столбцу). И при этом, мне надо, что бы все остальные поля тоже отсортировались (относительной выбранной строки).

-~{}~ 07.02.09 13:31:

структура таблицы например
1|2|3|4
2|4|1|5
1|2|1|1
или
1|2|3|4|5
2|4|1|5|8
1|2|1|1|1
и т.д. всегда разная
 

Nemozar

Новичок
Автор оригинала: Армян
Сначала разберись что есть строка а что столбец
строка.... сортирую по строкам , т.е. по первому индексу двумерного массива $tbl[$i]
 

Фанат

oncle terrible
Команда форума
а число параметров конечно?
если да, то сделай по вызову для каждого числа
 

Nemozar

Новичок
Автор оригинала: *****
а число параметров конечно?
если да, то сделай по вызову для каждого числа
т.е. так? (ну можно циклом...)

array_multisort($tbl[0],SORT_ASC,$tbl[1],SORT_DESC); (1)
array_multisort($tbl[0],SORT_ASC,$tbl[2],SORT_DESC); (2)

если да, то тут возникает проблема... на момент вызова 2* строки две другие уже отсортированы (а третья $tbl[2] потеряла связь с нулевой строкой.. и подобная сортировка просто все перемешает)

-~{}~ 07.02.09 13:57:

Т.е. сортируются строки, которые переданы в функцию, и записываются на это! же место (остальная часть таблицы остается и нельзя дальше с ней работать...)
 

Фанат

oncle terrible
Команда форума
нет, столько строк вызова, сколько вариантов количетсва строк в массиве
 

Nemozar

Новичок
Автор оригинала: *****
нет, столько строк вызова, сколько вариантов количетсва строк в массиве
как я понял, вы это имеете в виду

for ($i=0;$i<count($tbl);$i++){
array_multisort($tbl[0], SORT_ASC, $tbl[$i]);
}
 

Фанат

oncle terrible
Команда форума
у тебя здесь ОДНА строка. а я писал про НЕСКОЛЬКО
а откуда берется массив?
 

Nemozar

Новичок
Массив я сам генерируют из запроса, массив вообще у меня "времени".

Т.е. в ячейках хранится время. и по выбору той или иной строки, вся таблица(массив) должна сортироваться по выбранному полю(строке)
 

Nemozar

Новичок
т.к. там данные хранятся не преобразованые. (я после запроса еще обрабатываю данные до нужной формы).

Автор оригинала: *****
у тебя здесь ОДНА строка. а я писал про НЕСКОЛЬКО
а откуда берется массив?
for ($i=0;$i<count($tbl);$i++){
array_multisort($tbl[0], SORT_ASC, $tbl[$i]);
}
тут цикл.
Автор оригинала: *****
нет, столько строк вызова, сколько вариантов количетсва строк в массиве
 

Фанат

oncle terrible
Команда форума
ты правда считаешь, что я такой тупой, и не вижу тут цикл?

-~{}~ 07.02.09 14:17:

но ответ на твой вопрос очевиден
сортировать данные в запросе.
 

Nemozar

Новичок
Автор оригинала: *****
ты правда считаешь, что я такой тупой, и не вижу тут цикл?

-~{}~ 07.02.09 14:17:

но ответ на твой вопрос очевиден
сортировать данные в запросе.
тогда мне не понятна твоя фраза про "столько строк вызова, сколько строк в массиве...

В запросе нет возможности сортировать!
 

x-yuri

Новичок
Nemozar для сортировки массива тебе поможет call_user_func_array
но скорее всего ты сортируешь столбцы, чтобы сортировать строки первый индекс массива должен обозначать столбец

кроме того, скорее всего лучше проблему решить с помощью БД. Какие объемы данных ты собираешься с помощью php сортировать и почему бы не хранить в БД информацию так, чтобы ее можно было там же сортировать? какие у тебя там преобразования требуются?
 

Nemozar

Новичок
есть таблица


Это отчет о прошедшой игре (одной). В базе нужно хранить достаточно большое количество игр (и у каждой кол-во команд и заданий будет разное).

потому я хотел завести таблицу, для хранения информации о всех играх одновременно. Скажу сразу, реализацию наиглупейшая... но не хотелось заводить лишние таблицы...
Структура таблицы:

поле comand (список команд черзе разделитель) - com1|com2|com3
поле zad (задания, название заданий) - zad1|zad2|zad3|zad4
поле time (время выполнения, вот тут уже организовать хотел хранение двумерного массива, по 2м разделителям... т.е. подобие:) - 12.00|13.11|11.00|13.00||52.11|11.00|3.55|45.00||...
поэтому сортировка в БД не возможна.

Извлекая данные, я хотел их забить в двумерный массив и выводить (отсортировав по нужному полю, в зависимости от выбранного задания).

вроде полно описал. Еще раз повторюсь, что реализация хранения данных в таблице ужасна :) может будут у кого стоящие советы по реализации?
п.с. желательно в одной таблице, с учетом разного размера таблиц результатов :)
 

x-yuri

Новичок
teams
team_id | ...

tasks
task_id | ...

teams_tasks
team_id | task_id | time | ...

ты бы сразу с этого начал, а при неправильной организации БД может не только сортировка в php понадобиться ;-)
 

Nemozar

Новичок
Я изначально так и планировал сделать, но сталкнулся со слоностью составления запроса. для генерации таблицы (результирующей) на сколько я понимаю это, через использование join делается?
 
Сверху