[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отсортировать кликом по заголовку столбца
Nick888
Многомерный массив выведен в таблицу. Таблица с 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
if ($_GET['mode']==1)
{usort($Mass, "compare1");} #'Номер зачётной книжки' по возрастанию
else
{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>';
}

?>
sergeiss
Цитата (Nick888 @ 10.11.2014 - 20:50)
Как теперь сделать, чтобы сортировка производилась кликом по заголовку столбца?

2 варианта:
1. При клике уходит запрос на сервер и он выдает новый набор данных.
2. Все данные не просто выводятся на странице, а передаются в JS, который уже их выводит. Тогда сортировку можно сделать средствами JS.

Второй вариант более "правильный", хотя и требует немного больше знаний и умений, чем первый вариант.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
mvg
Например клик может передать аяксом в этот скрипт параметр название столбца по которому надо сортировать. Ну и колюэк функции подредактировать чтобы параметры выбора поля по которому сортировать были.
Nick888
А вот насчёт ссылки на документ...как я compare1 или compare2 для Creditbook там должен грамотно написать (вместо order=asc или order=desc)?

<td><a href="?sort=Surname&order=asc">Surname</a></td>
<td><a href="?sort=Name&order=asc">Name</a></td>
<td><a href="?sort=Birthday&order=asc">Birthday</a></td>
<td><a href="?sort=Creditbook&order=asc ">Creditbook</a></td>
Valick
Nick888, для начала вам надо определиться как должна происходить сортировка
либо в пределах текущей выборки (что делается средствами JavaScript) либо в пределах всей базы записей (либо AJAX либо "дедовским" способом с перезагрузкой страницы)


_____________
Стимулятор ~yoomoney - 41001303250491
Nick888
Переделал немного. Происходит сортировка, если только одну любую функцию из этих использовать, а другие закомментить. Если же все 3 одновременно в скрипте присутствуют, то только срабатывает по 1 полю (в данном случае 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=ascsurname">Surname</a></td>
<td><a href="?sort=Name&order2=ascname">Name</a></td>
<td><a href="?sort=Birthday">Birthday</a></td>
<td><a href="?sort=Creditbook&order3=ascbycred">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>';

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.