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 градусов в сторону...
И Скажи - что выйдет !?
представь себе 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 лет небось стукнуло и рассудок потерял ?! попался бы ты мне в жизни, я бы тебя быстро на место поставил!
Ты кто такой?! чё вообще обалдел?! как разговариваешь?! 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);