[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: сортировка двумерного массива
Blizard
есть двумерный массив $mas[][], который имеет 4 строки и 4 столбца:

3 5 1 5
1 3 9 2
3 4 0 1
9 2 3 1

мне его нужно отсортировать по третьему столбцу по возростанию, т.е. вот так:

3 4 0 1
3 5 1 5
9 2 3 1
1 3 9 2

как это более рационально сделать?



Спустя 1 час, 2 минуты, 53 секунды (14.02.2009 - 16:20) sergeiss написал(а):
Наверное, вот это будет лучше всего:
Код
bool usort ( array &$array, callback $cmp_function )

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

Спустя 11 месяцев, 5 дней, 23 часа, 20 минут, 54 секунды (20.01.2010 - 15:41) alex90 написал(а):
sergeiss - Не подходит!!! Ты что читать не умеешь?!?!
Какие глупости предлагаешь

Спустя 32 минуты, 57 секунд (20.01.2010 - 16:14) sergeiss написал(а):
Цитата (alex90 @ 20.01.2010 - 16:41)
sergeiss - Не подходит!!! Ты что читать не умеешь?!?!
Какие глупости предлагаешь

А ты, прежде чем орать, пойми суть ответа. И подумай немного. В любом случае это никогда не помешает.

Спустя 1 час, 28 минут, 40 секунд (20.01.2010 - 17:43) anonymouse написал(а):
Чет я не понял - в нете что мало примеров сортировак ?
представь себе 2 переменные $i $j

Одно по горизонтали другая вертикаль.

Чтобы отсортировать по горизонту ты будешь переберать всегда $i а $j просто инкрементить чтоб продвигаться по уровню...
А теперь поверни свой 2-ух мерный масив на 90 градусов в сторону...
И Скажи - что выйдет !?

Спустя 4 часа, 17 минут, 1 секунда (20.01.2010 - 22:00) Lex_R написал(а):
sergeiss все правильно сказал, просто тут надо самому написать callback функцию, которая сравнивает 3и элементы в массивах.

Спустя 17 минут, 29 секунд (20.01.2010 - 22:17) vital написал(а):
usort - излишество.
Простая сортировка пузырьком. В инете много примеров.. На той же википедии. Этому сейчас даже в школе учат..

Спустя 9 месяцев, 6 дней, 6 часов, 24 минуты, 22 секунды (27.10.2010 - 03:42) Артурчик написал(а):
бгг усорт излишество)))пузырек пузырьком а изобретать велосипед два раза глупость, тем более когда есть "разумное" средство.

Спустя 2 минуты, 19 секунд (27.10.2010 - 03:44) Артурчик2 написал(а):
кстати есть еще функция array_multisort ... но монстрам она не понравится...она сама сортирует(((

Спустя 3 месяца, 26 дней, 10 часов, 52 минуты, 19 секунд (23.02.2011 - 15:36) Evilsoul написал(а):
alex90
Ты кто такой?! чё вообще обалдел?! как разговариваешь?! 20 лет небось стукнуло и рассудок потерял ?! попался бы ты мне в жизни, я бы тебя быстро на место поставил!

Спустя 5 месяцев, 7 дней, 4 часа, 42 минуты, 36 секунд (2.08.2011 - 19:19) Guest написал(а):
Вот в каком виде можно представить функцию сортировки строк двумерного массива по значениям выбранного столбика в указанном направлении, причем для текстовых полей сортировка будет естественной.


//callback функция естественной сортировки в обратном направлении
function rstrnatcmp($a,$b){
return strnatcmp($b,$a); //сравниваем второй элемент с первым для реверса сортировки
}

//функция сортировки строк таблицы по значениями $index-го столбца
function multisort(array $table,$index,$asc){
//$index номер столбца таблицы, сортируя значения которого будут переставляться строки
//$asc направление сортировки прямое (true/false)


foreach ($table as $element){
$indArray[] = $element[$index]; //формируем массив из значений index-го столбца таблицы
}

//сортировка с сохранения связи значений с индексами
if($asc == true) //если выбрана сортировка по возрастанию
uasort($indArray,"strnatcmp"); //для сравнения элементов используется функция естественного сравнения строк
else{ //иначе
uasort($indArray,"rstrnatcmp"); //используется пользовательская функция реверса естественного сравнения строк
}

$keys = array_keys($indArray); //из отсортированного массива получаем массив индексов

//формируем новую таблицу, вставляя строки из старой по массиву индексов

foreach ($keys as $key){
$table1[]=$table[$key];

}

return $table1; //возвращаем отсортированную таблицу

}


Вызвать функцию можно следующим образом:


//сортируем таблицу по столбцу с индексом 1 в прямом направлении
$table = multisort ($table,1,true);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.