|
|
|
| в базе заложены названия, никак не пойму как все это вывести что бы алфавитная сортировка была по вертикали? например:
<table>
<tr>
<td>Ананас
<td>Грибы
<td>Желток
<tr>
<td>Банан
<td>Дерево
<td>Зелень
<tr>
<td>Виноград
<td>Ериван
<td>Изюм
</table>
|
| |
|
|
|
|
|
|
|
для: gOFREe
(25.06.2009 в 12:49)
| | ну как бы ORDER BY DESC и прочие прелести | |
|
|
|
|
|
|
|
для: nek-v
(25.06.2009 в 12:54)
| | Как из базы выводить я знаю, мне нужно что бы в таблице они выводились по вертикали, только моих мозгов на это че то не хватает (((
Ананас Грибы Желток
Банан Дерево Зелень
Виноград Ериван Изюм
|
| |
|
|
|
|
|
|
|
для: gOFREe
(25.06.2009 в 12:49)
| | если знаете сколько будет колонок, то проблем у вас не должно возникнуть. | |
|
|
|
|
|
|
|
для: Пятачок
(25.06.2009 в 13:16)
| | Объясните поподробнее, колонок 5, но что то я все равно не понимаю. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: sim5
(25.06.2009 в 15:17)
| | Спасибо большое все понял, кроме этой строки:
<?
if(!(($k+1) % $n)) echo "</tr>";
?>
|
Объясните пожайлуста это (($k+1) % $n) | |
|
|
|
|
|
|
|
для: 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>. | |
|
|
|
|
|
|
|
для: sim5
(25.06.2009 в 16:06)
| | какая то непонятная штука получается, если например $n=4; то $l=2.25; | |
|
|
|
|
|
|
|
для: gOFREe
(25.06.2009 в 16:51)
| | Да что же тут непонятно. При выборе колонок равном 4, при указанной длине массива, не будет элемента в нем с индексом равным 12 и еже с ним. В таблице указан бордюр, и если выводить в пустые ячейки, например, , то браузер отобразит эти колонки таблицы пустыми. Вот так строку во внутреннем цикле пропишите, и увидете:
<?
for($k=0; $k<$n; $k++) echo $a[$k*$n+$i] ? "<td>".$a[$k*$n+$i]."</td>" : "<td> </td>";
|
Чтобы не допускать такого, нужно проверять перед получением итераций основного цикла, сколько может получиться строк в таблице при указанном числе колонок.
PS. А чтобы не было 2.25:
<?
$l = round(count($a)/$n); //число итераций цикла
|
Попробуйте подумать сами - как узнать, на сколько колонок можно разложить массив, исходя из его количества элементов? Как это можно сделать? | |
|
|
|
|
|
|
|
для: 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>";
?>
}
|
| |
|
|
|
|
|
|
|
для: gOFREe
(25.06.2009 в 17:25)
| | Если в теле цикла (или условия) бедет одно действие, как тут - echo "<td>".$a[$k*$l+$i]."</td>";,
то можно его не обрамлять скобками. А вот если их будет два и более, то обязательно скобки нужны, иначе будет выполнено только первое из действий.
Вы думайте как определить число колонок, на которые можно разложить массив. | |
|
|
|
|
|
|
|
для: sim5
(25.06.2009 в 17:49)
| | я имею ввиду это выражение: $k*$n+$i, я подумал что будет правильнее $k*$l+$i | |
|
|
|
|
|
|
|
для: gOFREe
(25.06.2009 в 18:01)
| | Дажек так? И что будет?
PS. round выбросить, это не лекарство. | |
|
|
|
|
|
|
|
для: 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> </td>";
}else{
echo "<td>".$a[$id]."</td>"; //умножаем на число строк в таблице
}
}
echo "</tr>";
}
?>
|
| |
|
|
|
|
|
|
|
для: gOFREe
(25.06.2009 в 18:36)
| | Не занимайтесь "подгонкой под ответ"! Такое (как и первое) будет верно работать только в том случае, когда будет выполняться некое условие. Какое? Вы что точно знаете, и более того уверены, что число элементов в массиве позволяет так красиво его разложить? | |
|
|
|
|
|
|
|
для: sim5
(25.06.2009 в 19:02)
| | Почему подгонкой? При любом варианте этот код работает. | |
|
|
|
|
|
|
|
для: gOFREe
(26.06.2009 в 14:21)
| | У вас фиксированное число элементов в массиве? Тогда да. А если их будет 9, 10, 11..., тогда как? | |
|
|
|
|
|
|
|
для: sim5
(26.06.2009 в 14:45)
| | как раз все нормально, проверил все. | |
|
|
|
|
|
|
|
для: gOFREe
(26.06.2009 в 19:03)
| | Да делайте что хотите.... | |
|
|
|