Автор Тема: цикл для вывода в два столбца одного параметра  (Прочитано 9953 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
Привет!

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


используя я цикл while


спасибо
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
цикл для вывода в два столбца одного параметра
« Ответ #1 : 08 Августа 2003, 18:13:47 »

<?php

define
(\'COLUMNS_QTY\', 5);

echo \'<table width="100%" border=1>\';

$intElemCounter = 0;

for ( $foo = 1; $foo <= 7; $foo++ ) {   # any loop statement

    if ( 0 == $intElemCounter % COLUMNS_QTY ) {
        echo \'<tr>\';
    }; # if

    ++$intElemCounter;

    echo \'<td>Element #\' . $intElemCounter . \'</td>\';

    $intResidue = $intElemCounter % COLUMNS_QTY;

    if ( ! $intResidue ) {
        echo \'</tr>\';
    }; # if

};                                      # any loop statement

if ( $intResidue ) {
    echo \'<td colspan="\' . (COLUMNS_QTY - $intResidue) . \'"> </td></tr>\';
}; # if

echo \'</table>\';

?>
« Последнее редактирование: 10 Августа 2003, 14:43:17 от ThE0ReTiC »

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
цикл для вывода в два столбца одного параметра
« Ответ #2 : 08 Августа 2003, 18:14:40 »
Недостатки - построчный вывод.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
цикл для вывода в два столбца одного параметра
« Ответ #3 : 08 Августа 2003, 18:36:13 »
че-то тоже - читал этот - не спорю, красивый и чисто оформленный - но уж очень длинный код, и закрадывалось в меня сомнение - а не построчный ли он :-)

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
цикл для вывода в два столбца одного параметра
« Ответ #4 : 08 Августа 2003, 18:38:29 »
Тарас.
все спросто, как 2х2=4

берешь общее число записей.
делишь на количество колонок.
округляешь до большего целого
а дальше в цикле ставишь проверочку - если счетчик кратен этому самому числу, которое получил в предыдущей строчке, то начинаешь новую колонку.

Оффлайн новичок

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://proglan.pri.ee/forum - Форум Программистов!
цикл для вывода в два столбца одного параметра
« Ответ #5 : 09 Августа 2003, 17:50:18 »
можно по-другому, вот так:
$i=0;
while ($mess = mysql_fetch_array ($result))
{
if (!($i % 2))
{
echo ""; // после второй записи будет новая строка
}
//твои строки
$i++;
}
http://proglan.pri.ee/forum - Форум Программистов!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
цикл для вывода в два столбца одного параметра
« Ответ #6 : 09 Августа 2003, 18:24:57 »
Это будет опять построчно
Неужели трудно сделать таблицу из одной строки, написать , начать выводить, и в нужном месте всего лишь подставить ?

Оффлайн nobody

  • вроде как одушевленный
  • Постоялец
  • ***
  • Сообщений: 218
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.n0b0dy.ru
цикл для вывода в два столбца одного параметра
« Ответ #7 : 10 Августа 2003, 07:59:24 »
$query_1 = "SELECT title FROM map WHERE id = \'$value[parent]\'";
$result_1 = mysql_query($query_1);
$value_1 = mysql_fetch_array($result_1);
$str = strtolower($value_1[title]);
if($value = @mysql_fetch_array($result))
{
   // Выводишь первый результат;
   $query_1 = "SELECT title FROM map WHERE id = \'$value[parent]\'";
   $result_1 = mysql_query($query_1);
   $value_1 = mysql_fetch_array($result_1);
   $str = strtolower($value_1[title]);
   //выводишь второй
}
.::dO_ob::.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
цикл для вывода в два столбца одного параметра
« Ответ #8 : 10 Августа 2003, 10:49:49 »
госссподи!
это еще что за монстр?
нободя, ты сам-то понял, что это за бред?!
какой еще "первый-второй"?
Зачем тут два запроса?
не пей больше эту гадость

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
цикл для вывода в два столбца одного параметра
« Ответ #9 : 10 Августа 2003, 20:35:11 »
Положу всё-таки и свою реализацию...
Вообще, при выводе ПО СТОЛБЦАМ надо бы задавать кол-во строк, но для web\'а это не очень, поэтому задаю МАКСИМАЛЬНОЕ кол-во столбцов; реальное кол-во столбцов в зависимости от кол-ва отображаемых элементов может быть меньше.


# input parameters {
define(\'MAX_COLUMNS_QTY\', 5);
$intElemQty = 19;
# } input parameters

$intRowQty = ceil($intElemQty / MAX_COLUMNS_QTY);

define(\'COLUMNS_QTY\', ceil($intElemQty / $intRowQty));

echo \'\';

for ( $intRow = 1; $intRow <= $intRowQty; $intRow++ ) {
    echo \'\';
    for (
        $intElem = $intRow;
        $intElem <= ( COLUMNS_QTY - 1 ) * $intRowQty + $intRow;
        $intElem += $intRowQty
    ) {

        if ( $intElem <= $intElemQty ) {
            echo \'\';
        } # if
        else {
            echo \'\';
        }; # else

    }; # for
    echo \'\';
}; # for

echo \'
Element #\' . $intElem . \' 
\';

?>

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
цикл для вывода в два столбца одного параметра
« Ответ #10 : 10 Августа 2003, 21:23:15 »
чавой-то я не врубаюсь в этот код.
устал, наверное.
когда столько лишних, на мой взгляд, операторов, я просто теряюсь.
что он делает?
второй дефайн - это на случай, если колонок окажется больше, чем данных?
короче, это все левота опять у тебя.

я все понимаю - код академичный и суперправильный.
но за ним МЫСЛИ не видно.

во!
нашел.
учись студент.
никаких дефайнов и типов переменных спереди имени нету, но зато рабоотает, и все понятно.
аж два варианта на выбор.
http://phpclub.net/talk/showthread.php?s=&threadid=22969

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
цикл для вывода в два столбца одного параметра
« Ответ #11 : 10 Августа 2003, 21:36:11 »
RomikChef,
"учись студент" - я не заметил, а "устал, наверное" - заметил.

> что он делает?
Запусти и потести на разных данных.

> зато рабоотает
И мой работает.

Всё, флейм прекращаю. Извините.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
цикл для вывода в два столбца одного параметра
« Ответ #12 : 11 Августа 2003, 12:07:13 »
запустил.
мне надо вывести из базы. построчно.
твой код не работает.
Ы?

Ты молодец, конечно, правильно решил алгоритмическую задачку, которая не по зубам 90% посетителей этого форума.
можешь по праву собой гордиться.
вот только вопрос был не теоретический, а ПРАКТИЧЕСКИЙ.
И ты ЭТОТ практический вопрос даже со второй попытки не решил.
Ты стал его решать "в лоб". Как вывести таблицу так, чтобы элементы шли в столбик.

А там о базе идет речь.
А из базы я не могу вытаскивать строку текущая+5, а потом скакать обратно.
(нет, могу, конечно, но это в 100 раз медленнее, чем доставать построчно)

И вся твоя "правильность" в оформлении не стоит накладных расходов, которые потребуются для выполнения твоего "правильного" алгоритма.
Либо убивать базу сиками, либо считывать все сначала в массив (абсолютно лишняя операция).

В теории у тебя все хорошо.
Но человек просил решение не алгоритмической задачи, а вполне конкретной. выводить строчки базы в веб.
а для этого есть вполне простое хтмл решение.
продолжай уччиться :-)

по поводу "не заметил" - я действительно разобраться смог только после того, как привел к удобочитаемому виду и выкинул все лишнее.
Не воспринимаю код без отступов.
Ты можешь объяснить, зачем тебе здесь понадобились константы?
Это такой стиль программирования - чтобы врагам было труднее читать, а своих не жалко?

$intCols=5;
$intElemQty 19;

$intRowQty ceil($intElemQty/$intCols);
$intCols=ceil($intElemQty/$intRowQty);
echo \
'<table width="100%" border=1>\';
for ($intRow=1;$intRow<=$intRowQty;$intRow++ ) {
  echo \'<tr>\';
  for ($intElem = $intRow; $intElem <= ($intCols-1)*$intRowQty+$intRow; $intElem += $intRowQty) {
    if ($intElem <= $intElemQty) {
      echo \'<td>Element #\' . $intElem . \'</td>\';
    } else {
      echo \'<td> </td>\';
    }
  }
  echo \'</tr>\';
}
echo \'</table>\';

Оффлайн tserbis

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 496
  • +0/-0
  • 0
    • Просмотр профиля
цикл для вывода в два столбца одного параметра
« Ответ #13 : 11 Августа 2003, 12:19:01 »
> Ты молодец, конечно,
> можешь по праву собой гордиться.
Прекращай кормить меня леденцами :-) Мне уже 27.

> ты ЭТОТ практический вопрос даже со второй попытки не решил.
Согласен. Но ТОЛЬКО потому - что, не подумав, решал не его.

> вся твоя "правильность" в оформлении
Она вообще не при чём. Я просто привык так писать.

> продолжай уччиться :-)
да я и не прекращал

> Не воспринимаю код без отступов.
Они, конечно, там были. Форум съел. Наверное, тэги какие-то юзать надо было...

> Ты можешь объяснить, зачем тебе здесь понадобились константы?
Первая - из разряда "настроечных", это правильно, по-моему. Вторая - согласен, переменная вполне подойдёт.

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
цикл для вывода в два столбца одного параметра
« Ответ #14 : 11 Августа 2003, 13:04:21 »
приобщусь

<?
	
$dbQuery 
	
	
= \
'select name from table order by id\';
	
$result
	
	
	
= mysql_query($dbQuery);
	
$count   
	
	
= mysql_num_rows($result);
	
$rows_in_td 
	
= $count/2;
	
$rows_printed 
	
= 0;
	
$j 
	
	
	
	
= 0;


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

	

	
while (
$row mysql_fetch_row($result))
	
{
	
	
if (
$rows_printed $rows_in_td) {
	
	
	
$td1 .= $row[0].\'
\';
	
	
} else {
	
	
	
$td2 .= $row[0].\'
\';
	
	
}
	
	
$rows_printed++;
	
}

   
# цикл для вывода записей в оба столбика поочередно
	
	
	
	
	
	

	
while (
$row mysql_fetch_row($result))
	
{
	
	
if (
$j==0) {
	

	
	
	
$td1 .= $row[0].\'
\'; $j = 1; 
	
	
} else {
	
	
	
$td2 .= $row[0].\'
\'; $j = 0;
	
	
}
	
}
	

	
print \'<table><tr>\';
	
print \'<td>\'.$td1.\'</td>\';
	
print \'<td>\'.$td2.\'</td>\';
	
print \'</tr></table>\';
?>
« Последнее редактирование: 11 Августа 2003, 13:20:47 от Croaker »
Не все коту матрица.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28