Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка много мерного массива по различным полям

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Telnet
Отправлено: 21 Марта, 2015 - 22:22:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




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

массив примерно такой
5 2015-03-18 09:53:33 Вася
1 2015-03-21 17:30:00 Петя
9 2015-03-18 15:57:33 Вася
7 2015-03-19 18:53:16 Вася
8 2015-03-18 09:16:00 Петя
3 2015-03-19 18:53:04 Петя
4 2015-03-18 16:00:40 Вася
5 2015-03-18 16:01:46 Петя
6 2015-03-18 16:48:52 Игорь
10 2015-03-21 10:52:41 Юра
(Добавление)
Сделал может кому пригодится
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. // Функции сортировки по id
  3. function sIdAsc(a, b) {
  4.     if (a[0] > b[0]) return 1;
  5.     else if (a[0] < b[0]) return -1; else return 0;
  6. }
  7. function sIdDesc(a, b) {
  8.     if (a[0] < b[0]) return 1;
  9.     else if (a[0] > b[0]) return -1; else return 0;
  10. }
  11. // Функции сортировки по дате
  12. function sDateAsc(a, b) {
  13.     if (a[1] > b[1]) return 1;
  14.     else if (a[1] < b[1]) return -1;
  15.     else return 0;
  16. }
  17. function sDateDesc(a, b) {
  18.     if (a[1] < b[1]) return 1;
  19.     else if (a[1] > b[1]) return -1;
  20.     else return 0;
  21. }
  22. // Функции сортировки по имени
  23. function sNameAsc(a, b) {
  24.     if (a[2] > b[2]) return 1;
  25.     else if (a[2] < b[2]) return -1;
  26.     else return 0;
  27. }
  28. function sNameDesc(a, b) {
  29.     if (a[2] < b[2]) return 1;
  30.     else if (a[2] > b[2]) return -1;
  31.     else return 0;
  32. }
  33. console.log('Фильт по id убывание');
  34. sorting.sort(sIdAsc);
  35. console.log(sorting.join('\n'));
  36. console.log('Фильт по Date убывание');
  37. sorting.sort(sDateAsc);
  38. console.log(sorting.join('\n'));
  39. console.log('Фильт по Name убывание');
  40. sorting.sort(sNameAsc);
  41. console.log(sorting.join('\n'));
  42. console.log('Фильт по id возрастание');
  43. sorting.sort(sIdDesc);
  44. console.log(sorting.join('\n'));
  45. console.log('Фильт по Date возрастание');
  46. sorting.sort(sDateDesc);
  47. console.log(sorting.join('\n'));
  48. console.log('Фильт по Name возрастание');
  49. sorting.sort(sNameDesc);
  50. console.log(sorting.join('\n'));
  51. console.log('------------------------');
  52.  

То что имеем на выходе

Изначальный массив
53,2015-03-18 09:53:33,Super User
63,2015-03-21 17:30:00,Super User
53,2015-03-18 09:53:33,Super User
62,2015-03-21 10:52:41,test
56,2015-03-18 15:57:33,Super User
61,2015-03-19 18:53:16,Super User
51,2015-03-18 09:16:00,Super User
60,2015-03-19 18:53:04,Super User
57,2015-03-18 16:00:40,Super User
58,2015-03-18 16:01:46,Super User
59,2015-03-18 16:48:52,Super User
Фильт по id убывание
51,2015-03-18 09:16:00,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
56,2015-03-18 15:57:33,Super User
57,2015-03-18 16:00:40,Super User
58,2015-03-18 16:01:46,Super User
59,2015-03-18 16:48:52,Super User
60,2015-03-19 18:53:04,Super User
61,2015-03-19 18:53:16,Super User
62,2015-03-21 10:52:41,test
63,2015-03-21 17:30:00,Super User
Фильт по Date убывание
51,2015-03-18 09:16:00,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
56,2015-03-18 15:57:33,Super User
57,2015-03-18 16:00:40,Super User
58,2015-03-18 16:01:46,Super User
59,2015-03-18 16:48:52,Super User
60,2015-03-19 18:53:04,Super User
61,2015-03-19 18:53:16,Super User
62,2015-03-21 10:52:41,test
63,2015-03-21 17:30:00,Super User
Фильт по Name убывание
58,2015-03-18 16:01:46,Super User
51,2015-03-18 09:16:00,Super User
53,2015-03-18 09:53:33,Super User
56,2015-03-18 15:57:33,Super User
57,2015-03-18 16:00:40,Super User
53,2015-03-18 09:53:33,Super User
59,2015-03-18 16:48:52,Super User
60,2015-03-19 18:53:04,Super User
61,2015-03-19 18:53:16,Super User
63,2015-03-21 17:30:00,Super User
62,2015-03-21 10:52:41,test
Фильт по id возрастание
63,2015-03-21 17:30:00,Super User
62,2015-03-21 10:52:41,test
61,2015-03-19 18:53:16,Super User
60,2015-03-19 18:53:04,Super User
59,2015-03-18 16:48:52,Super User
58,2015-03-18 16:01:46,Super User
57,2015-03-18 16:00:40,Super User
56,2015-03-18 15:57:33,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
51,2015-03-18 09:16:00,Super User
Фильт по Date возрастание
63,2015-03-21 17:30:00,Super User
62,2015-03-21 10:52:41,test
61,2015-03-19 18:53:16,Super User
60,2015-03-19 18:53:04,Super User
59,2015-03-18 16:48:52,Super User
58,2015-03-18 16:01:46,Super User
57,2015-03-18 16:00:40,Super User
56,2015-03-18 15:57:33,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
51,2015-03-18 09:16:00,Super User
Фильт по Name возрастание
62,2015-03-21 10:52:41,test
58,2015-03-18 16:01:46,Super User
61,2015-03-19 18:53:16,Super User
60,2015-03-19 18:53:04,Super User
59,2015-03-18 16:48:52,Super User
63,2015-03-21 17:30:00,Super User
57,2015-03-18 16:00:40,Super User
56,2015-03-18 15:57:33,Super User
53,2015-03-18 09:53:33,Super User
53,2015-03-18 09:53:33,Super User
51,2015-03-18 09:16:00,Super User
------------------------
 
 Top
exlant
Отправлено: 22 Марта, 2015 - 00:30:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




с начало блин сделал на php, потом заметил, что форум по js пришлось переделывать!

CODE (javascript):
скопировать код в буфер обмена
  1. var array = [
  2.         [5, "2015-03-18", "09:53:33", "Вася"],
  3.         [1, "2015-03-21", "17:30:00", "Петя"],
  4.         [9, "2015-03-18", "15:57:33", "Вася"],
  5.         [7, "2015-03-19", "18:53:16", "Вася"],
  6.         [8, "2015-03-18", "09:16:00", "Петя"],
  7.         [3, "2015-03-19", "18:53:04", "Петя"],
  8.         [4, "2015-03-18", "16:00:40", "Вася"],
  9.         [5, "2015-03-18", "16:01:46", "Петя"],
  10.         [6, "2015-03-18", "16:48:52", "Игорь"],
  11.         [10, "2015-03-21", "10:52:41", "Юра"]
  12.    ];
  13.    var key = 0;   // ключ массива
  14.    var type  = 1; //  в каком направлении сортировать 1 - сверху вниз, 0 - снизу вверх
  15.    function asort(a,b){
  16.         if(a[key] === b[key]) return 0;
  17.         if(type === 1){
  18.             return (a[key] > b[key]) ? +1 : -1;
  19.         }else{
  20.            return (a[key] < b[key]) ? +1 : -1;
  21.         }
  22.     }
  23.    console.log(array.sort(asort));
 
 Top
LIME
Отправлено: 22 Марта, 2015 - 06:50:48
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ну вот в итоге как-то так
CODE (javascript):
скопировать код в буфер обмена
  1.   var array = [
  2.             [5, "2015-03-18", "09:53:33", "Вася"],
  3.             [1, "2015-03-21", "17:30:00", "Петя"],
  4.             [9, "2015-03-18", "15:57:33", "Вася"],
  5.             [7, "2015-03-19", "18:53:16", "Вася"],
  6.             [8, "2015-03-18", "09:16:00", "Петя"],
  7.             [3, "2015-03-19", "18:53:04", "Петя"],
  8.             [4, "2015-03-18", "16:00:40", "Вася"],
  9.             [5, "2015-03-18", "16:01:46", "Петя"],
  10.             [6, "2015-03-18", "16:48:52", "Игорь"],
  11.             [10, "2015-03-21", "10:52:41", "Юра"]
  12.         ];
  13.         Array.prototype.usort = function(key, direction){
  14.             direction = direction == -1 ? -1 : 1;
  15.             return this.sort(function(a,b){
  16.                 if(a[key] == b[key]) return 0;
  17.                 return direction * (a[key] > b[key] ? +1 : -1) ;
  18.             });
  19.         }
  20.         console.log(array.usort(1, -1));
  21.         console.log(array.usort(1));

(Отредактировано автором: 22 Марта, 2015 - 08:18:52)

 
 Top
exlant
Отправлено: 22 Марта, 2015 - 11:31:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




LIME, не подскажите, а в php можно как то передать свойства в пользовательскую функцию сорта?
 
 Top
LIME
Отправлено: 22 Марта, 2015 - 12:40:22
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




exlant замыкание
PHP:
скопировать код в буфер обмена
  1. function mySort(&$arr, $key, $direction = 1){
  2.     $direction = $direction == -1 ? -1 : 1;
  3.     usort($arr, function($a,$b) use ($key, $direction){
  4.         if ($a[$key] == $b[$key]) {
  5.             return 0;
  6.         }
  7.         return $direction * ($a[$key] < $b[$key] ? -1 : 1);
  8.     });
  9. }
  10. mySort($arr, 1, -1);
  11. var_dump($arr);
  12. mySort($arr, 1);
  13. var_dump($arr);
 
 Top
exlant
Отправлено: 22 Марта, 2015 - 13:22:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




LIME спасибо!

(Отредактировано автором: 22 Марта, 2015 - 13:22:27)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB