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

Форум PHP

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

 

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

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

тема: Алфавитная сортировка в таблице по вертикали
 
 автор: gOFREe   (25.06.2009 в 12:49)   письмо автору
 
 

в базе заложены названия, никак не пойму как все это вывести что бы алфавитная сортировка была по вертикали? например:

<table>
    <tr>
<td>Ананас
<td>Грибы
<td>Желток
    <tr>
<td>Банан
<td>Дерево
<td>Зелень
   <tr>
<td>Виноград
<td>Ериван
<td>Изюм
</table>

  Ответить  
 
 автор: nek-v   (25.06.2009 в 12:54)   письмо автору
 
   для: gOFREe   (25.06.2009 в 12:49)
 

ну как бы ORDER BY DESC и прочие прелести

  Ответить  
 
 автор: gOFREe   (25.06.2009 в 13:01)   письмо автору
 
   для: nek-v   (25.06.2009 в 12:54)
 

Как из базы выводить я знаю, мне нужно что бы в таблице они выводились по вертикали, только моих мозгов на это че то не хватает (((

Ананас     Грибы     Желток
Банан     Дерево     Зелень
Виноград     Ериван     Изюм 

  Ответить  
 
 автор: Пятачок   (25.06.2009 в 13:16)   письмо автору
 
   для: gOFREe   (25.06.2009 в 12:49)
 

если знаете сколько будет колонок, то проблем у вас не должно возникнуть.

  Ответить  
 
 автор: gOFREe   (25.06.2009 в 13:56)   письмо автору
 
   для: Пятачок   (25.06.2009 в 13:16)
 

Объясните поподробнее, колонок 5, но что то я все равно не понимаю.

  Ответить  
 
 автор: sim5   (25.06.2009 в 15:17)   письмо автору
 
   для: gOFREe   (25.06.2009 в 13:56)
 

Да все просто:

<?
$a 
= array('Ананас''Банан''Виноград''Грибы''Дерево''Ериван''Желток''Зелень''Изюм');
$n 3//число колонок
$l count($a)/$n//получем число строк в таблице (число итераций основного цикла)
?>
<table border="1">
<?
for ($i=0$i<$l$i++) { //цикл определяющий число строк в таблице
  
echo "<tr>"//открываем строку
  
for($k=0$k<$n$k++) { //раскладываем колонки таблицы
    
echo "<td>".$a[$k*$n+$i]."</td>"//получаем элементы массива: 0 3 6; 1 4 7 и т.д.
    
if(!(($k+1) % $n)) echo "</tr>"//если пора закрывать строку таблицы, закрываем
  
}
}  
?>
</table>

  Ответить  
 
 автор: gOFREe   (25.06.2009 в 15:35)   письмо автору
 
   для: sim5   (25.06.2009 в 15:17)
 

Спасибо большое все понял, кроме этой строки:

<?
if(!(($k+1) % $n)) echo "</tr>";
?>

Объясните пожайлуста это (($k+1) % $n)

  Ответить  
 
 автор: sim5   (25.06.2009 в 16:06)   письмо автору
 
   для: gOFREe   (25.06.2009 в 15:35)
 

Ой, это нужно отсюда вообще выкинуть (скопировано совсем из другого :)), и цикл должен выглядеть так:
<?
for ($i=0$i<$l$i++) {
  echo 
"<tr>";
  for(
$k=0$k<$n$k++) echo "<td>".$a[$k*$n+$i]."</td>";
  echo 
"</tr>";
}
?>

Но что это такое, знать надо. Это деление по модулю, которое вычисляет остаток от деления. То есть, если мы задали $n (число колонок в таблице) 3, то чила 0, 3, 6...., то есть кратные 3, вернут нам при этой операции 0. Вся же запись эта означает, что, если следущая итерация цикла плюс 1 вернет нам 0 (цикл находится в стадии отображения последней из $n колонок), то пора закрывать строку таблицы - вывести </tr>.

  Ответить  
 
 автор: gOFREe   (25.06.2009 в 16:51)   письмо автору
 
   для: sim5   (25.06.2009 в 16:06)
 

какая то непонятная штука получается, если например $n=4; то $l=2.25;

  Ответить  
 
 автор: sim5   (25.06.2009 в 17:01)   письмо автору
 
   для: gOFREe   (25.06.2009 в 16:51)
 

Да что же тут непонятно. При выборе колонок равном 4, при указанной длине массива, не будет элемента в нем с индексом равным 12 и еже с ним. В таблице указан бордюр, и если выводить в пустые ячейки, например, &nbsp;, то браузер отобразит эти колонки таблицы пустыми. Вот так строку во внутреннем цикле пропишите, и увидете:
<?
for($k=0$k<$n$k++) echo $a[$k*$n+$i] ? "<td>".$a[$k*$n+$i]."</td>" "<td>&nbsp;</td>";

Чтобы не допускать такого, нужно проверять перед получением итераций основного цикла, сколько может получиться строк в таблице при указанном числе колонок.

PS. А чтобы не было 2.25:
<?
$l 
round(count($a)/$n); //число итераций цикла

Попробуйте подумать сами - как узнать, на сколько колонок можно разложить массив, исходя из его количества элементов? Как это можно сделать?

  Ответить  
 
 автор: gOFREe   (25.06.2009 в 17:25)   письмо автору
 
   для: sim5   (25.06.2009 в 17:01)
 

А вот так разьве не правильней?

<?
$a 
= array('Ананас''Банан''Виноград''Грибы''Дерево''Ериван''Желток''Зелень''Изюм');
$n 4//число колонок 
$l round(count($a)/$n); //получем число строк в таблице (число итераций основного цикла)


for ($i=0$i<$l$i++) { //цикл определяющий число строк в таблице
  
echo "<tr>"//открываем строку
  
for($k=0$k<$n$k++){
echo 
"<td>".$a[$k*$l+$i]."</td>"//умножаем на число строк в таблице
}
echo 
"</tr>";
?>
}

  Ответить  
 
 автор: sim5   (25.06.2009 в 17:49)   письмо автору
 
   для: gOFREe   (25.06.2009 в 17:25)
 

Если в теле цикла (или условия) бедет одно действие, как тут - echo "<td>".$a[$k*$l+$i]."</td>";,
то можно его не обрамлять скобками. А вот если их будет два и более, то обязательно скобки нужны, иначе будет выполнено только первое из действий.

Вы думайте как определить число колонок, на которые можно разложить массив.

  Ответить  
 
 автор: gOFREe   (25.06.2009 в 18:01)   письмо автору
 
   для: sim5   (25.06.2009 в 17:49)
 

я имею ввиду это выражение: $k*$n+$i, я подумал что будет правильнее $k*$l+$i

  Ответить  
 
 автор: sim5   (25.06.2009 в 18:10)   письмо автору
 
   для: gOFREe   (25.06.2009 в 18:01)
 

Дажек так? И что будет?

PS. round выбросить, это не лекарство.

  Ответить  
 
 автор: gOFREe   (25.06.2009 в 18:36)   письмо автору
 
   для: sim5   (25.06.2009 в 18:10)
 

Вот так все работает! ))

<?
$a 
= array('Ананас''Банан''Виноград''Грибы''Дерево''Ериван''Желток''Зелень''Изюм');
$n 4//число колонок 
$l ceil(count($a)/$n); //получем число строк в таблице (число итераций основного цикла) округляем до большего числа


for ($i=0$i<$l$i++) { //цикл определяющий число строк в таблице
  
echo "<tr>"//открываем строку
  
for($k=0$k<$n$k++){
$id=$k*$l+$i;
if (
$id>=count($a)) 
{
echo 
"<td>&nbsp;</td>";
}else{
echo 
"<td>".$a[$id]."</td>"//умножаем на число строк в таблице
}
}
echo 
"</tr>";
}
?>

  Ответить  
 
 автор: sim5   (25.06.2009 в 19:02)   письмо автору
 
   для: gOFREe   (25.06.2009 в 18:36)
 

Не занимайтесь "подгонкой под ответ"! Такое (как и первое) будет верно работать только в том случае, когда будет выполняться некое условие. Какое? Вы что точно знаете, и более того уверены, что число элементов в массиве позволяет так красиво его разложить?

  Ответить  
 
 автор: gOFREe   (26.06.2009 в 14:21)   письмо автору
 
   для: sim5   (25.06.2009 в 19:02)
 

Почему подгонкой? При любом варианте этот код работает.

  Ответить  
 
 автор: sim5   (26.06.2009 в 14:45)   письмо автору
 
   для: gOFREe   (26.06.2009 в 14:21)
 

У вас фиксированное число элементов в массиве? Тогда да. А если их будет 9, 10, 11..., тогда как?

  Ответить  
 
 автор: gOFREe   (26.06.2009 в 19:03)   письмо автору
 
   для: sim5   (26.06.2009 в 14:45)
 

как раз все нормально, проверил все.

  Ответить  
 
 автор: sim5   (26.06.2009 в 19:39)   письмо автору
 
   для: gOFREe   (26.06.2009 в 19:03)
 

Да делайте что хотите....

  Ответить  
Rambler's Top100
вверх

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