powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Отсортировать кликом по заголовку столбца
2 сообщений из 2, страница 1 из 1
Отсортировать кликом по заголовку столбца
    #38805660
Nniicckk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Многомерный массив выведен в таблицу. Таблица с 4 полями: фамилия, имя, дата рождения, номер зачётной книжки. Сортировка по возрастанию для всех полей выполнена, как теперь реализовать по убыванию, подскажите. Необходимо так, чтобы при первом клике по полю (к примеру sirname) была сортировка по возрастанию, при втором по убыванию, при третьем снова по возрастанию, при четвёртом опять по убыванию... ?

<?php

include ("sortirovka.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&sort=ascsurname">Surname</a></td>
<td><a href="?sort=Name&sort=ascname">Name</a></td>
<td><a href="?sort=Birthday&sort=ascbirthday">Birthday</a></td>
<td><a href="?sort=Creditbook&sort=asccreditbook">Creditb ook</a></td>
</tr>
';


switch ($_GET['sort'])
{

case "ascsurname":
usort($Mass, "compare1");
break 1;
case "descsurname":
usort($Mass, "compare2");
break 1;


case "ascname":
usort($Mass, "compare3");
break 1;
case "descname":
usort($Mass, "compare4");
break 1;


case "asccreditbook":
{usort($Mass, "compare5");};
break;
case "desccreditbook":
{usort($Mass, "compare6");};
break;


case "ascbirthday":
{usort($Mass, "compare7");};
break;
case "descbirthday1":
{usort($Mass, "compare8");};
break;

}


#Вывод списка группы в таблицу
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>';

?>

/*
В файле sortitovka.php, функции выглядят следующим образом:
function compare1 ($v1, $v2) { #asc
if ($v1["Surname"] == $v2["Surname"]) return 0;
return ($v1["Surname"] < $v2["Surname"])? -1: 1;
}

function compare2 ($v1, $v2) { #desc
if ($v1["Surname"] == $v2["Surname"]) return 0;
return ($v1["Surname"] < $v2["Surname"])? 1: -1;
}
/*
...
Рейтинг: 0 / 0
Отсортировать кликом по заголовку столбца
    #38805668
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NniicckkСортировка по возрастанию для всех полей выполнена, как теперь реализовать по убыванию, подскажите. Необходимо так, чтобы при первом клике по полю (к примеру sirname) была сортировка по возрастанию, при втором по убыванию, при третьем снова по возрастанию, при четвёртом опять по убыванию... ?Шапку таблицы генерите динамически, указывая в формируемых ссылках направление сортировки.

PS
1. Простая задача. Интереснее сделать сортировку "с историей" (полезно при наличии одинаковых значений в столбцах таблицы).
2. Странный подход. Откуда берется массив? Если реально задан жестко в коде, так при столь малых объемах данных можно пульнуть его целиком на клиента и там генерить таблицу с требуемой сортировкой. Если же массив формируется из запроса к базе данных - так в запросе и сортировать.
3. 8 (восемь!) колбек-функций сортировки - явный перебор. :-) Да, еще блок switch явно лишний - его можно выкинуть, заменив имена функций на значение параметра направления. Хотя, код очень прост для понимания и, в какой-то мере, для поддержки.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Отсортировать кликом по заголовку столбца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]