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]   

> Без описания
Egorrr
Отправлено: 23 Апреля, 2010 - 00:44:28
Post Id


Новичок


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


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




Есть простой многомерный массив с тремя столбцами и заданными значениями:

PHP:
скопировать код в буфер обмена
  1. $name[$i][0] = ...
  2. $name[$i][1] = ...
  3. $name[$i][2] = ...


Как с помощью array_multisort произвести сортировку по N-ому столбцу, при этом чтобы другие столбцы были "привязаны" к сортируемому?

(Отредактировано автором: 23 Апреля, 2010 - 00:46:30)

 
 Top
JustUserR
Отправлено: 23 Апреля, 2010 - 12:03:46
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Egorrr пишет:
Есть простой многомерный массив с тремя столбцами и заданными
Как с помощью array_multisort произвести сортировку по N-ому столбцу, при этом чтобы другие столбцы были "привязаны" к сортируемому?
Функция array_multisort не должна разрывать соответствие между текущими столбцами и вложенными подмассивами - однако она будет сортировать только заданные подмассивы
Для приведенного примера можете использовать функцию http://php.su/functions/?call-user-func-array для вызова array_multisort для каждого из подмассивов первоо уровня
Можно сделать свою рекурсивную функцию с передачей массива по ссылке - таким образом когда вы будете проходиться по нижнему уровню (То есть боле глубокому подмассиву) и сортирвать его - то сможете по опоеделенным условиями и поменять местами родительские элементы


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Egorrr
Отправлено: 23 Апреля, 2010 - 13:12:08
Post Id


Новичок


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


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




уфф... как все сложно, когда должно быть все просто...
можно пример привести, я не думаю, что сортировка матрицы по столбцу редко используется. В принципе можно использовать N массивов-столбцов, но проще же сделать 1 простой многомерный массив... Или в пхп такую сортировку не продумали?
 
 Top
JustUserR
Отправлено: 23 Апреля, 2010 - 13:29:28
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Egorrr пишет:
Уфф... как все сложно, когда должно быть все просто...
Можно пример привести, я не думаю, что сортировка матрицы по столбцу редко используется. В принципе можно использовать N массивов-столбцов, но проще же сделать 1 простой многомерный массив... Или в пхп такую сортировку не продумали?
Если вас массив многомерный и при этом однородный - то есть число и структура подмассивов и их элементов одинаковая - то задача сильно упрощается
Если в качестве первичного подмассива для сортировки вы будете использовать $name[0] то функцию надо вызыват в виде array_multisort($name[0],$name[1]...) для всех подмассивов данного измерения


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
AdMeen
Отправлено: 23 Апреля, 2010 - 13:29:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 370
Дата рег-ции: Сент. 2009  
Откуда: Воронеж


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




Egorrr пишет:
уфф... как все сложно, когда должно быть все просто...
можно пример привести, я не думаю, что сортировка матрицы по столбцу редко используется. В принципе можно использовать N массивов-столбцов, но проще же сделать 1 простой многомерный массив... Или в пхп такую сортировку не продумали?


Ручками, ручками, совсем с пхп обленились люди Радость .
 
 Top
JustUserR
Отправлено: 23 Апреля, 2010 - 13:30:57
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




AdMeen пишет:
Ручками, ручками, совсем с пхп обленились люди
В этом плане PHP со всеми модулями достаточно интересная штука - понадобится какая-то функциональность и решите ее реализовать - а потом окажется что такая функция уже есть да еще и с таким же именем как вы хотели назвать свою Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Egorrr
Отправлено: 23 Апреля, 2010 - 14:05:08
Post Id


Новичок


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


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




Вот скрипт, у меня НЕ получается сортировка Нахмурился

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.         $id = 'folderf';
  4.         $i = 0;
  5.  
  6. if ($handle = opendir($id)) {
  7.     $name = array();
  8.  
  9.     while (false !== ($filename = readdir($handle)))
  10.     {
  11.         $name[$i][0] = $filename;
  12.         $name[$i][1] = filesize ($id.'/'.$filename);
  13.         $name[$i][2] = filemtime($id.'/'.$filename);
  14.         $i++ ;
  15.     }
  16.  
  17.  
  18.         array_multisort ($name[2], SORT_DESC, SORT_STRING, $name[1],$name[0]);
  19.  
  20.     for ($i=0; $i<count($name); $i++) {
  21.                 echo ($name[$i][0] .' '. $name[$i][1] .' '. date ("F d Y H:i:s.",$name[$i][2]) .'<br>');
  22.     }
  23.  
  24.     closedir($handle);
  25. }
  26. ?>

(Отредактировано автором: 23 Апреля, 2010 - 14:15:32)

 
 Top
JustUserR
Отправлено: 25 Апреля, 2010 - 11:25:53
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Egorrr пишет:
array_multisort ($name[2], SORT_DESC, SORT_STRING, $name[1],$name[0]);
В данном случае сортировака может не работаь по паре причин - во-первых модификаторы сортировки (А по сути предопределенные константы) должны стоять последними среди агрументов функции - и также попробуйте передавать массивы по ссылке с помощью & - а во-вторых вы явно указываете только 3 первых подмассива а их у вас в общем случае произвольное число - поэтому можете попробоваь сгенерировать нужный вид функции сортировки с помощью eval или call_user_func с аргументами (Как я и предлагал выше)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB