Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка таблицы по столбцам
 
 автор: Veresk   (21.10.2007 в 13:37)   письмо автору
 
 

Добрый день, подскажите, пожалуйста, как отсортировать таблицу по столбцам таким образом, чтобы при нажатии заголовка происходила сортировка или по убыванию, или по возрастанию, в зависимости от того как отсортировано на данный момент: если отсортировано по убыванию, то при нажатии кнопки заголовка - сортировка происходит по возрастанию?


<?php
$N 
= array (1234);
$T = array (abcd);
$P = array (onetwothreefour);
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
, т.е. каждая строка должна сохранять все свои значения без изменения - меняется только положение строки.
Большое спасибо!!!

   
 
 автор: sim5   (21.10.2007 в 17:51)   письмо автору
 
   для: Veresk   (21.10.2007 в 13:37)
 

А зачем три кнопки, если сортировка производится сразу трех массивов? Или они должны все таки сортироваться независимо? Если все сразу, можно так:


<?php
$N 
= array (1234); 
$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> 

   
 
 автор: Veresk   (22.10.2007 в 17:17)   письмо автору
 
   для: sim5   (21.10.2007 в 17:51)
 

В том-то и дело, что сортировка должна происходить по каждому столбцу в отдельности: в первом столбце даты, во втором и в третьем текст, который сортируется по алфавиту, а элементы каждой строки связаны друг с другом по смыслу, т.е. все нулевые элементы массивов это как бы одно целое, то же со всеми первыми элементами и т.д.. При нажатии на первой кнопке сортируется первый столбец и, соответственно, строки передвигаются каждая в соответствии со своим сортируемым элементом, т.е. становится в ту строку, где находится этот элемент. Как же это сделать?
А есть ли какая-то функция, сортирующая элементы разных массивов?
Большое спасибо!!!

   
 
 автор: sim5   (22.10.2007 в 17:41)   письмо автору
 
   для: Veresk   (22.10.2007 в 17:17)
 

Ну та функция которую я прописал, она и сортирует либо многомерный или несколько одномерных массивов. Не понятно вот что - вы в примере написали как связаны элементы, и что они должны сортироваться либо в прямом порядке (от меньшего к большему), либо в обратном (от большего к меньшему). Потому и получается что три кнопки никчему.
Если вам надо отсортировать массив (1, 2, 3, 4), в соответсвии с какими либо условиями, то есть функции и для этого, например, uksort(). Но как тогда понять кнопку, которая у вас имеет "триггерный" эффект - два состояния?

   
 
 автор: Veresk   (23.10.2007 в 19:07)   письмо автору
 
   для: sim5   (22.10.2007 в 17:41)
 

да, sim5, вы правы, я в общем-то решила прислушаться к вашему мнению, спасибо вам огромное! Единственный вопрос: я пока новичок и не очень хорошо разбираюсь в коде, если вам не трудно, поясните мне, пожалуйста эту строку:

="<?php=isset($_POST['as']) ? ~$_POST['as'] : 1;?>" />


Первая часть понятна, а дальше :( - что значит этот кусочек: ? ~$_POST['as'] : 1
что означает знак вопроса и тильда? - поискала и ничего понятного не нашла.
Буду очень благодарна за помощь!!!

Хотя, три кнопки я тоже реализую

   
 
 автор: sim5   (23.10.2007 в 19:20)   письмо автору
 
   для: 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. Понятно? А то мне самому не понятно :))

   
 
 автор: Veresk   (23.10.2007 в 19:39)   письмо автору
 
   для: sim5   (23.10.2007 в 19:20)
 

Да, теперь все ясно,еще раз спасибо !!!!!!!!!!! :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования