|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.11.2014, 16:12 | #1 |
Регистрация: 10.11.2014
Сообщений: 9
|
Отсортировать кликом по заголовку столбца
Многомерный массив выведен в таблицу. Таблица с 4 полями: фамилия, имя, дата рождения, номер зачётной книжки. Сортировка сделана по номеру зачётной книжки (возрастание, убывание). Как теперь сделать, чтобы сортировка производилась кликом по заголовку столбца?
<?php $Mass = array( array('Surname' => 'Ив', 'Name' => 'Иван', 'Birthday' => '1966.01.01', 'Creditbook' => '111'), array('Surname' => 'Хр', 'Name' => 'Денис', 'Birthday' => '1968.02.02', 'Creditbook' => '112'), array('Surname' => 'Ша', 'Name' => 'Николай', 'Birthday' => '1975.03.03', 'Creditbook' => '1199'), array('Surname' => 'Че', 'Name' => 'Егор', 'Birthday' => '1976.04.04', 'Creditbook' => '1144'), array('Surname' => 'Пр', 'Name' => 'Евгений', 'Birthday' => '1962.05.05', 'Creditbook' => '110'), array('Surname' => 'Ар', 'Name' => 'Илья', 'Birthday' => '1960.06.06', 'Creditbook' => '116'), array('Surname' => 'Пу', 'Name' => 'Александр', 'Birthday' => '1999.07.07', 'Creditbook' => '117'), array('Surname' => 'Ма', 'Name' => 'Антон', 'Birthday' => '1988.08.08', 'Creditbook' => '118'), array('Surname' => 'Жд', 'Name' => 'Александр', 'Birthday' => '1980.09.09', 'Creditbook' => '119'), array('Surname' => 'Ше', 'Name' => 'Виталий', 'Birthday' => '1990.10.10', 'Creditbook' => '120') ); echo '<table border=1>'; # Шапка таблицы echo '<td>Surname</td>'; echo '<td>Name</td>'; echo '<td>Birthday</td>'; echo '<td>Creditbook</td>'; # Функции сортировки по возрастанию и убыванию function compare1 ($v1, $v2) { if ($v1["Creditbook"] == $v2["Creditbook"]) return 0; return ($v1["Creditbook"] < $v2["Creditbook"])? -1: 1; } function compare2 ($v1, $v2) { if ($v1["Creditbook"] == $v2["Creditbook"]) return 0; return ($v1["Creditbook"] < $v2["Creditbook"])? 1: -1; } # СОРТИРОВКА по creditbook usort($Mass, "compare1"); # 'Номер зачётной книжки' по возрастанию #usort($Mass, "compare2"); # 'Номер зачётной книжки' по убыванию #Вывод списка группы в таблицу for ($i=0; $i<count($Mass); $i++) { echo '<tr>'; echo "<td>". $Mass[$i]['Surname'] . "</td>"; echo "<td>". $Mass[$i]['Name'] . "</td>"; echo "<td>". $Mass[$i]['Birthday'] . "</td>"; echo "<td>". $Mass[$i]['Creditbook'] . "<br />". "</td>"; echo '</tr>'; } ?> |
10.11.2014, 17:03 | #2 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,177
|
тут два варианта:
1. Использовать JS (JQuery) морду с возможностью сортировки содержимого.. php тогда не при чем 2. Обрабатывать клик по заголовку столбца тем-же JS и перезагружать страницу с параметром столбца ... типа Код:
Код:
.... еще в втором случае можно замутить AJax обновление контента..... |
11.11.2014, 22:12 | #3 |
Регистрация: 10.11.2014
Сообщений: 9
|
Переделал немного... Сортировка производится кликом по заголовку столбца, но работает лишь для одного из 4 (только для поля creditbook). Как переделать, чтобы для каждого столбца работала, подскажите.
<?php $Mass = array( array('Surname' => 'Ив', 'Name' => 'Иван', 'Birthday' => '1966.01.01', 'Creditbook' => '111'), array('Surname' => 'Хр', 'Name' => 'Денис', 'Birthday' => '1968.02.02', 'Creditbook' => '112'), array('Surname' => 'Ша', 'Name' => 'Николай', 'Birthday' => '1975.03.03', 'Creditbook' => '1199'), array('Surname' => 'Че', 'Name' => 'Егор', 'Birthday' => '1976.04.04', 'Creditbook' => '1144'), array('Surname' => 'Пр', 'Name' => 'Евгений', 'Birthday' => '1962.05.05', 'Creditbook' => '110'), array('Surname' => 'Ар', 'Name' => 'Илья', 'Birthday' => '1960.06.06', 'Creditbook' => '116'), array('Surname' => 'Пу', 'Name' => 'Александр', 'Birthday' => '1999.07.07', 'Creditbook' => '117'), array('Surname' => 'Ма', 'Name' => 'Антон', 'Birthday' => '1988.08.08', 'Creditbook' => '118'), array('Surname' => 'Жд', 'Name' => 'Александр', 'Birthday' => '1980.09.09', 'Creditbook' => '119'), array('Surname' => 'Ше', 'Name' => 'Виталий', 'Birthday' => '1990.10.10', 'Creditbook' => '120') ); echo '<table border=1>'; # Шапка таблицы echo ' <table border=1> <tr> <td><a href="?sort=Surname&order1=ascsurna me">Surname</a></td> <td><a href="?sort=Name&order2=ascname">Na me</a></td> <td><a href="?sort=Birthday">Birthday</a></td> <td><a href="?sort=Creditbook&order3=ascby cred">Creditbook</a></td> </tr> '; function compare1 ($v1, $v2) { if ($v1["Surname"] == $v2["Surname"]) return 0; return ($v1["Surname"] < $v2["Surname"])? -1: 1; } function compare2 ($v1, $v2) { if ($v1["Surname"] == $v2["Surname"]) return 0; return ($v1["Surname"] < $v2["Surname"])? 1: -1; } # СОРТИРОВКА по surname if ($_GET['order1']=='ascsurname') {usort($Mass, "compare1");} #'Фамилия' по возрастанию else {usort($Mass, "compare2");} #'Фамилия' по убыванию function compare3 ($v1, $v2) { if ($v1["Name"] == $v2["Name"]) return 0; return ($v1["Name"] < $v2["Name"])? -1: 1; } function compare4 ($v1, $v2) { if ($v1["Name"] == $v2["Name"]) return 0; return ($v1["Name"] < $v2["Name"])? 1: -1; } # СОРТИРОВКА по name if ($_GET['order2']=='ascname') {usort($Mass, "compare3");} #'Имя' по возрастанию else {usort($Mass, "compare4");} #'Имя' по убыванию function compare5 ($v1, $v2) { if ($v1["Creditbook"] == $v2["Creditbook"]) return 0; return ($v1["Creditbook"] < $v2["Creditbook"])? -1: 1; } function compare6 ($v1, $v2) { if ($v1["Creditbook"] == $v2["Creditbook"]) return 0; return ($v1["Creditbook"] < $v2["Creditbook"])? 1: -1; } # СОРТИРОВКА по creditbook if ($_GET['order3']=='ascbycred') {usort($Mass, "compare5");} #'Номер зачётной книжки' по возрастанию else {usort($Mass, "compare6");} #'Номер зачётной книжки' по убыванию #Вывод списка группы в таблицу for ($i=0; $i<count($Mass); $i++) { echo '<tr>'; echo "<td>". $Mass[$i]['Surname'] . "</td>"; echo "<td>". $Mass[$i]['Name'] . "</td>"; echo "<td>". $Mass[$i]['Birthday'] . "</td>"; echo "<td>". $Mass[$i]['Creditbook'] . "<br />". "</td>"; echo '</tr>'; } echo '</table>'; ?> |
11.11.2014, 23:38 | #4 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,177
|
Ну а что хотели? У вас условаия else то отрабатываются всегда.... Конкретной режим конкретное сравнение.... Switch case лучше использоваать
|
13.11.2014, 03:21 | #5 |
Регистрация: 10.11.2014
Сообщений: 9
|
Использовал конструкцию switch-case, теперь сортируются по возрастанию все поля. При нажатии на заголовок sirname - сортируется sirname, при нажатии на name - сортируется name, и так далее. А как сделать так, чтобы при первом клике по полю (к примеру sirname) была сортировка по возрастанию, при втором по убыванию, при третьем снова по возрастанию, при четвёртом опять по убыванию... ?
<td><a href="?sort=Surname&order1=ascsurna me">Surname</a></td> <td><a href="?sort=Name&order2=ascname">Na me</a></td> <td><a href="?sort=Birthday&order4=ascbirt hday">Birthday</a></td> <td><a href="?sort=Creditbook&order3=ascby cred">Creditbook</a></td> switch ($_GET['order1']==ascsurname): case "surname": {usort($Mass, "compare1");}; break; case "surname1": {usort($Mass, "compare2");}; break; endswitch; switch ($_GET['order2']==ascname): case "name": {usort($Mass, "compare3");}; break; case "name1": {usort($Mass, "compare4");}; break; endswitch; switch ($_GET['order3']==ascbycred): case "srav_surname": {usort($Mass, "compare5");}; break; case "srav_surname1": {usort($Mass, "compare6");}; break; endswitch; switch ($_GET['order4']==ascbirthday): case "birthday": {usort($Mass, "compare7");}; break; case "birthday1": {usort($Mass, "compare8");}; break; endswitch; |
13.11.2014, 08:08 | #6 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,177
|
1. Похоже вы не поняли прелесть switch ... он шире if и по сути у вас должен быть только 1 switch и куча case и все ... не нужно после каждого второго кейса закрывать
2. и не нужно дополнительных параметров order1 3. я вроде бы уже писал ранее.... нужно менять направление сортировки в ссылках Код:
|
14.11.2014, 18:44 | #7 |
Регистрация: 10.11.2014
Сообщений: 9
|
Немного не так. Появляется ещё одно поле и там свои проблемки, нажимаю на это "новое" поле, сортировка по убыванию производится, но сразу после этого поле "исчезает"...Нужно как-то изменить внутри case...
switch ($_GET['sort']) { case "ascsurname": usort($Mass, "compare1"); echo '<td><a href="?sort=descsurname">Surname</a></td>'; break 1; case "descsurname": usort($Mass, "compare2"); echo '<td><a href="?sort=asccsurname">Surname</a></td>'; break 1; case "ascname": usort($Mass, "compare3"); echo '<td><a href="?sort=descname">Surname</a></td>'; break 1; case "descname": usort($Mass, "compare4"); echo '<td><a href="?sort=ascname">Surname</a></td>'; break 1; case "asccreditbook": {usort($Mass, "compare5");}; echo '<td><a href="?sort=desccreditbook">Surname </a></td>'; break; case "desccreditbook": {usort($Mass, "compare6");}; echo '<td><a href="?sort=asccreditbook">Surname</a></td>'; break; case "ascbirthday": {usort($Mass, "compare7");}; echo '<td><a href="?sort=descbirthday">Surname</a></td>'; break; case "descbirthday1": {usort($Mass, "compare8");}; echo '<td><a href="?sort=ascbirthday">Surname</a></td>'; break; } |
15.11.2014, 13:52 | #8 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,177
|
Вам что все разжевывать? Бездумно чтоли делаете? У вас везде вывод _surname а ссылки разные я большеи не буду подсказывать, задействуйте серое вещество
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка матрицы. Первую и вторую строки отсортировать выбором по убыванию, пятый и шестой столбец отсортировать (С++) | Sasha316 | Помощь студентам | 0 | 23.11.2012 00:48 |
двойной клик по заголовку окна | andrew_jr20 | C# (си шарп) | 2 | 17.12.2011 20:03 |
Как найти программу по заголовку и закрыть ее? | Catsys | Общие вопросы Delphi | 2 | 16.09.2011 23:26 |
Убить процесс по заголовку окна | Nice42ru | Помощь студентам | 27 | 21.01.2010 11:55 |
Событие click по заголовку формы? | Polotenchik | Общие вопросы Delphi | 3 | 24.06.2009 12:48 |