|
|
|
| Добрый день, подскажите, пожалуйста, как отсортировать таблицу по столбцам таким образом, чтобы при нажатии заголовка происходила сортировка или по убыванию, или по возрастанию, в зависимости от того как отсортировано на данный момент: если отсортировано по убыванию, то при нажатии кнопки заголовка - сортировка происходит по возрастанию?
<?php
$N = array (1, 2, 3, 4);
$T = array (a, b, c, d);
$P = array (one, two, three, four);
if ($_POST['submit'] == "N") {
... //здесь начинаются трудности :(
}
if ($_POST['submit'] == "T") {
...
}
if ($_POST['submit'] == "P") {
...
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
</head>
<body>
<form action="sort-2.php" method="post">
<table border=1>
<tr><th><input type=submit value="N"></th><th><input type=submit value="T"></th>
<th><input type=submit value="P"></th></tr>
<tr><td><?=$N[0]?></td><td><?=$T[0]?></td><td><?=$P[0]?></td></tr>
<tr><td><?=$N[1]?></td><td><?=$T[1]?></td><td><?=$P[1]?></td></tr>
<tr><td><?=$N[2]?></td><td><?=$T[2]?></td><td><?=$P[2]?></td></tr>
<tr><td><?=$N[3]?></td><td><?=$T[3]?></td><td><?=$P[3]?></td></tr>
</table>
</form>
</body>
</html>
|
И еще, необходимо, чтобы сами строки не менялись, вернее, чтобы они менялись относительно сортируемого элемента столбца, например:
1 а one
2 b two
при сортировке по убыванию должно быть :
2 b two
1 а one
, т.е. каждая строка должна сохранять все свои значения без изменения - меняется только положение строки.
Большое спасибо!!! | |
|
|
|
|
|
|
|
для: Veresk
(21.10.2007 в 13:37)
| | А зачем три кнопки, если сортировка производится сразу трех массивов? Или они должны все таки сортироваться независимо? Если все сразу, можно так:
<?php
$N = array (1, 2, 3, 4);
$T = array ('a','b', 'c', 'd');
$P = array ('one', 'two','three', 'four');
if (isset($_POST['as'])) {
if ($_POST['as'] == 1) $s = SORT_DESC; else $s = SORT_ASC;
array_multisort($N, $s, $T, $s, $P, $s);
}
?>
<form action="sort-2.php" method="post">
<table border=1>
<tr>
<th colspan="3"><input type="submit" value="Reverse" /></th>
</tr>
<tr><td><?=$N[0]?></td><td><?=$T[0]?></td><td><?=$P[0]?></td></tr>
<tr><td><?=$N[1]?></td><td><?=$T[1]?></td><td><?=$P[1]?></td></tr>
<tr><td><?=$N[2]?></td><td><?=$T[2]?></td><td><?=$P[2]?></td></tr>
<tr><td><?=$N[3]?></td><td><?=$T[3]?></td><td><?=$P[3]?></td></tr>
</table>
<input type="hidden" name="as" value="<?php=isset($_POST['as']) ? ~$_POST['as'] : 1;?>" />
</form>
|
| |
|
|
|
|
|
|
|
для: sim5
(21.10.2007 в 17:51)
| | В том-то и дело, что сортировка должна происходить по каждому столбцу в отдельности: в первом столбце даты, во втором и в третьем текст, который сортируется по алфавиту, а элементы каждой строки связаны друг с другом по смыслу, т.е. все нулевые элементы массивов это как бы одно целое, то же со всеми первыми элементами и т.д.. При нажатии на первой кнопке сортируется первый столбец и, соответственно, строки передвигаются каждая в соответствии со своим сортируемым элементом, т.е. становится в ту строку, где находится этот элемент. Как же это сделать?
А есть ли какая-то функция, сортирующая элементы разных массивов?
Большое спасибо!!! | |
|
|
|
|
|
|
|
для: Veresk
(22.10.2007 в 17:17)
| | Ну та функция которую я прописал, она и сортирует либо многомерный или несколько одномерных массивов. Не понятно вот что - вы в примере написали как связаны элементы, и что они должны сортироваться либо в прямом порядке (от меньшего к большему), либо в обратном (от большего к меньшему). Потому и получается что три кнопки никчему.
Если вам надо отсортировать массив (1, 2, 3, 4), в соответсвии с какими либо условиями, то есть функции и для этого, например, uksort(). Но как тогда понять кнопку, которая у вас имеет "триггерный" эффект - два состояния? | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 17:41)
| | да, sim5, вы правы, я в общем-то решила прислушаться к вашему мнению, спасибо вам огромное! Единственный вопрос: я пока новичок и не очень хорошо разбираюсь в коде, если вам не трудно, поясните мне, пожалуйста эту строку:
="<?php=isset($_POST['as']) ? ~$_POST['as'] : 1;?>" />
|
Первая часть понятна, а дальше :( - что значит этот кусочек: ? ~$_POST['as'] : 1
что означает знак вопроса и тильда? - поискала и ничего понятного не нашла.
Буду очень благодарна за помощь!!!
Хотя, три кнопки я тоже реализую | |
|
|
|
|
|
|
|
для: Veresk
(23.10.2007 в 19:07)
| | Это означает:
выражение 1 ? выражение 2 : выражение 3.
Если выражение 1 истинно, то будет взято выражение 2, иначе выражение 3.
Тильда перед $_POST['as'] означет "отрицание", другими словами она инвертирует значение $_POST['as']. При первой загрузке страницы $_POST['as'] не установлена, так как форма не передавалась еще, поэтому значение скрытого поля равно 1 (взято выражение 3). С первой оправкой почты будет взято выражение 2, т.е. $_POST['as'], но инвертированное, то есть значение скрытого поля формы не будет уже равно 1. При следующей отправке формы, опять станет равно 1, и т.д., а выражение 3 уже не используется. А по этому значению выбирается тип сортировки массива. Кнопка служит "логическим триггером", если можно так выразится, то что вам и нужно.
PS. Понятно? А то мне самому не понятно :)) | |
|
|
|
|
|
|
|
для: sim5
(23.10.2007 в 19:20)
| | Да, теперь все ясно,еще раз спасибо !!!!!!!!!!! :) | |
|
|
|
|