Многомерный массив выведен в таблицу. Таблица с 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>'; } ?>
1) Там где <td>Surname</td> - сделать ссылку, на тот же документ, только с параметрами, например: ?sortby=name&order=asc (и, или desc). asc = по возрастанию, desc = по убиванию. Вместо asc и desc можно использовать свои слова. 2) В коде где генерируется вывод нужно учитывать параметры $_GET; Есть у тебя функция compare1 а в ней Creditbook. Так вот этот элемент нужно подставлять из нашего $_GET, ну и в зависимости от значения $_GET['order'] вызывать compare1 или compare2. Все.
А вот насчёт ссылки на документ...как я 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>
Сортировка по возрастанию для всех полей выполнена, как теперь реализовать по убыванию, подскажите... В итоге необходимо так, чтобы при первом клике по полю (к примеру 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; } /*
ну вот я насчитал 3 варианта, которые ты хочешь реализовать: 1. Первый раз, сортировки нет, параметра order нет, ссылку для сортировки делаем по возрастанию 2. Если параметр order есть и он равен desc то ссылку для сортировки делаем order=asc 3. Если параметр order есть и он равен asc то ссылку для сортировки делаем order=desc if ... else if .. else
<td><a href="?sort=Surname&sort=ascsurname">Surname</a></td> 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; } Так корявенько работает, как переделать?
Сортировать можно по номерам полей. Демонстрировать вверх или вниз идет сортировка - подчеркиванием сверху или снизу, по какой колонке - жирным. Кусок из цикла (каменты добавил): Код (PHP): if ($index+1 === (int) $get->field) { // номер активной колонки по которой сейчас сорт $order = ($get->order) ? null : 1; $style = 'text-decoration:' . ( ($order) ? 'overline;' : 'underline;'); $style .= 'font-weight:bold;'; } else { $style = 'text-decoration:none; font-weight:normal;'; $order = 1; } $field->sortlink = '<a href="' .$page_url.$get->build_query(array('field'=>$index+1,'order'=>$order)) .'" title="Сортировка" style="'.$style.'">'.$caption.'</a>'; Делал год назад, не доделал - mebmal.ru/tables?f=7&p=4 - и главное оказалось что по индексам сортировать вредно. Добавил поле в бд, убавил поле из бд - поиск немедленно сдох. Так что не делайте по индексам если хотите чтобы вас гугл индексировал, или не меняйте ничего никогда в бд, или делайте, ибо по индексам короче и проще. Да, затем когда из параметров построен запрос, он заканчивается например так ... order by 3 asc - после компиляции в смысле.
deblogger Код (Text): <td colspan="2"> <div class="divFooter borderRight"><span>И</span>нтернет-магазин .... </div> </td><td> <div class="divFooter"><span>Н</span>аш иллюстрированный каталог .... </div> </td> Код (Text): .divFooter span { font-size: 400%; float: left; color: white; background-color: lightgrey; margin-right: 3px; line-height: .9em; } .divFooter { padding: 1em; padding-bottom: 2em; display: inline-block; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } о боги... нтернет-магазин... аш иллюстрированный каталог... Код (Text): /* заменяем ".divFooter span" на: */ .divFooter::first-letter { font-size: 400%; float: left; color: white; background-color: lightgrey; margin-right: 3px; line-height: .9em; } .divFooter { /* оставляем как есть */ } Код (Text): <td colspan="2"> <div class="divFooter borderRight">Интернет-магазин .... </div> </td><td> <div class="divFooter">Наш иллюстрированный каталог .... </div> </td> так же ж чище, не? Добавлено спустя 4 минуты 58 секунд: Авторизация .... Пароль от 3 до 64 символов .... какая разница какой длины у меня пароль? это мои личные данные. не ощущаю важность сайта - ткну "1" и отправлю. сайт обязан считать единицу моим паролем. свято верю что томик войны и мира меня спасет - копипаст и сайт обязан считать это моим паролем. то есть какая-то разумная размерность должна быть. килобайт например. но явно указывать что лишь 64 символа и что вообще есть какой-то лимит по длине пароля - не айс что-то... Добавлено спустя 4 минуты 28 секунд: "Пароль безразличен к регистру символов!" - чтоа? мой пАрОль равен Пароль и паРОЛЬ ??? то есть 32 комбинушки дают одинаковый результат? сильно. ладно, на этом закончу придираться))) мебель ничего так, красивая
Выпейте галоперидолу для начала, чтобы не копаться в ящике с трусами находясь в гостях. Там было написано год назад или там не было написано год назад? Год назад с я трудом написал if(isset($_GET['submit']) echo 'работает'; а с этим неописуйемым текстовым конфигом под названием css до сих пор напряги. Гребись он конем. Теперь пейте циклодол. Добавлено спустя 16 минут 13 секунд: Точно, вспомнил, лет 15 назад правильный хтмл должен был быть из больших букв, а русский текст из коитуса. Только такие сайты признавались православными. <TABLE><TR><TD ALIGN="CENTER">бНОПНЯ</TD><TD><IMG BORDER="0" SRC="/images/logo.gif"></TD><TR></TABLE> Чувак под названием Артемий Лебедев там даже специально писал для любителей заглядывать под юбку, типа <!-- ну что, интересно да? --> Народ в юзенете жаловался на него сиськимасиськи. Так вот, я почему-то запомнил самый главный свой прикол. Вероятно это был самый первый раз когда я делал веб-страницу. Ну значит пишу я текст и делаю переносы там, где полагается а он сука в браузере, без переносов оказывается. В тексте переносы есть, в а браузере - пропадают начисто. Ну что за хрень, думаю, быть такого не может - оказывается может. Надо было ставить <br>. Так вот любитель галоперидола, по своей работе я столько навидался хтмлей, что мне за 100 жизней не написать, и там такое бывает, отчего вы скончались бы на месте. Делать отступы и промежутки с помощью br до сих по в тренде.
ок, я договорился с ближайшей аптекой о пожизненной поставке галоперИдола. не хочу скончаться, аптека ж тогда мало маржи получит. и как-то "ещё" не хочу смотреть. глянул конкретно ваш, поделился с санитарами своими переживаниями
Ну хулеж с долбоящера возьмешь. Так и будет теперь корчится доказывая что имеет право. Имеете-имеете, только и другие имеют, понимаете? С такой например ботанской репой в калашный ряд не комильфо. Добавлено спустя 2 минуты 48 секунд: То есть вас долбоящера не приглашали оценить дизайн или там юзабилитю или что-то еще и тем более эффективность текстов и конфига. Даже не вам дали даже не ссылку, чисто убедиться что сортировка таблицы дело не сложное, особенно если не париться проблемой индексации поисковиками. Нет, вы ж доебались до какой-то хуеты, о которой я уже и забыл начисто. Почему? Потому что вы - мудак.
Есть такой " ", хорошо справляется=) Остается только дунуть или обожраться колес, чтобы сделать таблицу.