PDA

Просмотр полной версии : сортировка 2-х мерного массива


quazare
03.07.2005, 18:37
помогите с грамотным готовым решением!
необходимо сделать сортировку 2-х мерного массива по определенному столбику например по 3-ему.
т.е. нужен готовый алгоритм для функции usort!

вот такой - почемото не проканал :(


function sorting($a, $b)
{
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}

TERRORist
03.07.2005, 19:55
и где же тут готовое решение?:(

quazare
03.07.2005, 20:27
и где же тут готовое решение?:(

А ты напряги мозги - когда совместно прийдем к общему решению - будет и результат в виде кода, возможно потом все ненужные сообщения постирать .... ;)

Да при твоем подходе - этот подраздел совсем загнется...

P.S. Однако, ты советы и вопросы задаешь.... :D :D

TERRORist
03.07.2005, 21:06
модератор тебе судья :)
попробуй использовать дополнительные массивы.

TERRORist
03.07.2005, 21:07
имхо такой исходник только тебе понадобится :(

quazare
03.07.2005, 21:31
поконкретнее....

TERRORist
03.07.2005, 22:12
поконкретнее....
Я далек от мысли...

-MS-
04.07.2005, 00:32
ну так на вскидку, без проверки работоспособности...

function sort($mas,$ii,$jj,$k) //mas - входной массив, ixj - размерность, k - столбец по которому сортируем
{
stat=0;
for($i=0;$i<=$ii;$i++){
$tmp_m[$i]=$mas[$i][$k]; //заполняем промежуточный массив значениями столбца по которому будем сортировать
$tmp_i[$i]=$i; //промежуточный массив с индексами по строкам
}
//сортируем промежуточный массив по возрастанию, соответственно изменится массив индексов
for($i=0;$i<=$ii;$i++){
$min=$tmp_m[$i];
for($j=$i;$j<=$ii;$j++){
if($min<$tmp_m[$j]){
$tmp_m[$i]=$tmp_m[$j]; //тут у нас сортируется сам массив, обмен
$min=$tmp_m[$j]; //значениями элементов массива
$tmp_m[$j]=$tmp; //
$tmp_i[$i]=$j; //а тут идексы выстраиваются
$tmp_i[$j]=$i; //
}
}
}
//получили отсортированный массив с индексами по возрастанию
//теперь организуем выходной массив
for($i=0;$i<=$ii;$i++){
$tmp=tmp_i[$i];
for($j=0;$j<=$jj;$j++){
$out[$i][$j]=$mas[$tmp][$j];
}
}
return $out;
}

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

KBA-KBA
11.07.2005, 03:47
array-multisort (http://ru3.php.net/manual/ru/function.array-multisort.php) вас спасет... (RM)
---
ну может еще это понадибится :)

/* function RotateArray()
Функция транспонирует (поварачивает на 90 градусов) двумерный массив
KBA-KBA / ColD. [cold@elze.ru]
*/
function RotateArray($table)
{
foreach ($table as $key1 => $row)
foreach ($row as $key2 => $value)
{
$return[$key2][$key1] = $value;
}
return $return;
}

quazare
12.07.2005, 14:00
все спасибо! все работает!