Forum Webscript.Ru

Программирование => PHP => Тема начата: tarya от 08 Августа 2003, 17:49:16

Название: цикл для вывода в два столбца одного параметра
Отправлено: tarya от 08 Августа 2003, 17:49:16
Привет!

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


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


спасибо
Название: цикл для вывода в два столбца одного параметра
Отправлено: tserbis от 08 Августа 2003, 18:13:47


define(\'COLUMNS_QTY\', 5);

echo \'\';

$intElemCounter = 0;

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

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

    ++$intElemCounter;

    echo \'\';

    $intResidue = $intElemCounter % COLUMNS_QTY;

    if ( ! $intResidue ) {
        echo \'\';
    }; # if

};                                      # any loop statement

if ( $intResidue ) {
    echo \'\';
}; # if

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

?>
Название: цикл для вывода в два столбца одного параметра
Отправлено: tserbis от 08 Августа 2003, 18:14:40
Недостатки - построчный вывод.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 08 Августа 2003, 18:36:13
че-то тоже - читал этот - не спорю, красивый и чисто оформленный - но уж очень длинный код, и закрадывалось в меня сомнение - а не построчный ли он :-)
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 08 Августа 2003, 18:38:29
Тарас.
все спросто, как 2х2=4

берешь общее число записей.
делишь на количество колонок.
округляешь до большего целого
а дальше в цикле ставишь проверочку - если счетчик кратен этому самому числу, которое получил в предыдущей строчке, то начинаешь новую колонку.
Название: цикл для вывода в два столбца одного параметра
Отправлено: новичок от 09 Августа 2003, 17:50:18
можно по-другому, вот так:
$i=0;
while ($mess = mysql_fetch_array ($result))
{
if (!($i % 2))
{
echo ""; // после второй записи будет новая строка
}
//твои строки
$i++;
}
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 09 Августа 2003, 18:24:57
Это будет опять построчно
Неужели трудно сделать таблицу из одной строки, написать , начать выводить, и в нужном месте всего лишь подставить ?
Название: цикл для вывода в два столбца одного параметра
Отправлено: nobody от 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]);
   //выводишь второй
}
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 10 Августа 2003, 10:49:49
госссподи!
это еще что за монстр?
нободя, ты сам-то понял, что это за бред?!
какой еще "первый-второй"?
Зачем тут два запроса?
не пей больше эту гадость
Название: цикл для вывода в два столбца одного параметра
Отправлено: tserbis от 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 . \' 
\';

?>
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 10 Августа 2003, 21:23:15
чавой-то я не врубаюсь в этот код.
устал, наверное.
когда столько лишних, на мой взгляд, операторов, я просто теряюсь.
что он делает?
второй дефайн - это на случай, если колонок окажется больше, чем данных?
короче, это все левота опять у тебя.

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

во!
нашел.
учись студент.
никаких дефайнов и типов переменных спереди имени нету, но зато рабоотает, и все понятно.
аж два варианта на выбор.
http://phpclub.net/talk/showthread.php?s=&threadid=22969
Название: цикл для вывода в два столбца одного параметра
Отправлено: tserbis от 10 Августа 2003, 21:36:11
RomikChef,
"учись студент" - я не заметил, а "устал, наверное" - заметил.

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

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

Всё, флейм прекращаю. Извините.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 11 Августа 2003, 12:07:13
запустил.
мне надо вывести из базы. построчно.
твой код не работает.
Ы?

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

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

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

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

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

$intCols=5;
$intElemQty = 19;

$intRowQty = ceil($intElemQty/$intCols);
$intCols=ceil($intElemQty/$intRowQty);
echo \'\';
for ($intRow=1;$intRow<=$intRowQty;$intRow++ ) {
  echo \'\';
  for ($intElem = $intRow; $intElem <= ($intCols-1)*$intRowQty+$intRow; $intElem += $intRowQty) {
    if ($intElem <= $intElemQty) {
      echo \'\';
    } else {
      echo \'\';
    }
  }
  echo \'\';
}
echo \'
Element #\' . $intElem . \' 
\';
Название: цикл для вывода в два столбца одного параметра
Отправлено: tserbis от 11 Августа 2003, 12:19:01
> Ты молодец, конечно,
> можешь по праву собой гордиться.
Прекращай кормить меня леденцами :-) Мне уже 27.

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

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

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

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

> Ты можешь объяснить, зачем тебе здесь понадобились константы?
Первая - из разряда "настроечных", это правильно, по-моему. Вторая - согласен, переменная вполне подойдёт.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Croaker от 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 \'\';
print \'\';
print \'\';
print \'
\'.$td1.\'\'.$td2.\'
\';
?>
Название: цикл для вывода в два столбца одного параметра
Отправлено: tserbis от 11 Августа 2003, 13:15:27
Может, .= ?
Название: цикл для вывода в два столбца одного параметра
Отправлено: Croaker от 11 Августа 2003, 13:21:22
tserbis

Точно :). Поправил.
Название: цикл для вывода в два столбца одного параметра
Отправлено: pahal от 11 Августа 2003, 13:43:28
Как-то всё сложновато.
Если нужно всего лишь вывести результаты в табличку из двух столбиков, то довольно просто сделать это так:

$res=mysql_query(" ЗАПРОС ");
$count=mysql_num_rows($res);
   $i=0;
   print "   ";
   print "";
   while($row=mysql_fetch_row($res)){
      if($i%2==0 && $i!=0){print "";}
         print "";
     $i++;
         if($count==$i && $i%2!=0){print "";} ### пустая ячейка, чтобы не было дырки в таблице
   }
   print "
$row[1] ..... $row[..n...] 
";

не правда ли, достаточно просто...
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 11 Августа 2003, 13:53:52
Croaker, вот ты тоже - собираешь совсем ненужную переменную.
В общем-то - ничего страшного, но некрасиво...

pahal, если бы ты потрудился пойти по ссылке, которую я дал, то мог бы не трудиться набивать здесь точно такой же код.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Minister от 12 Июня 2004, 19:12:38
Конечно, все очень замечательно. Попробовал два варианта и оба хорошо работают, т.е. они выводят таблицу такого вида:
+----+----+
| 1  | 2  |
+----+----+
| 3  | 4  |
+----+----+
| 5  | 6  |
+----+----+

Как видно, таблица (выше) заполняется по строкам. А как сделать, чтобы таблица заполнялась по столбцам? (см. ниже)

+----+----+
| 1  | 4  |
+----+----+
| 2  | 5  |
+----+----+
| 3  | 6  |
+----+----+

Спасибо за ответ. Может я что-то не так делаю - поправьте.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 12 Июня 2004, 19:58:42
сделай таблицу в две ячейки, выводи начала в одну, потом во вторую
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 12 Июня 2004, 20:00:24
а среди "Всевозможных Скриптов" подходящего не нашлось?
и "Компьютерная Библиотека" тебе не помогла?
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 12 Июня 2004, 20:10:43
мужык
http://docs.gets.ru - твое детищо?
я плакал
Название: цикл для вывода в два столбца одного параметра
Отправлено: Minister от 12 Июня 2004, 21:38:13
Цитировать
RomikChef:
а среди "Всевозможных Скриптов" подходящего не нашлось? и "Компьютерная Библиотека" тебе не помогла?

Прикалываетесь? :)
И там и там подходящего не нашлось.
Цитировать
RomikChef:
мужык http://docs.gets.ru - твое детищо? я плакал

Весь портал мой. А что там не так? (ответьте в личку) :)

Цитировать
RomikChef:
сделай таблицу в две ячейки, выводи начала в одну, потом во вторую

Хех это самое простое. Но мне хочется чтобы все было разделено по полочкам, а не перекашивало...
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 13 Июня 2004, 02:49:27
Цитировать
Minister:
Но мне хочется чтобы все было разделено по полочкам, а не перекашивало...

а кто тебя заставляет перекашивать? делай ровно.хтмл, чай, знаешь?
конкретные проблемы есть?

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

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

про портал.
забавный способ подбора материалов.
больше всего напоминает Плюшкина.
или воронье гнездо - тащишь все ,что блестит, не понимая ценности.
"классы в 3 пыхе" - это очень сильно.
остальное я там на месте откомментировал еще днем.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Minister от 13 Июня 2004, 09:19:33
Цитировать
RomikChef:
ну засунь половину в массив и выводи по очереди, если так хочется водну таблицу. тут же все решения очевидные.

Я конечно никого не прошу написать мне код. Я хотел получить ответ, что нужно изменить в вышепредставленных кодах, чтобы в таблице вывод был равномерным. Сам я пытался там что-то мудрить, но ничего толкового из этого не получил.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 13 Июня 2004, 09:52:00
Цитировать
Minister:
Я хотел получить ответ, что нужно изменить в вышепредставленных кодах,

ничего.
поскольку здесь есть варианты ВООБЩЕ на любой вкус.
если ты разуешь глаза, и напряжешься, чтобы найти нужное, то вопросов у тебя не будет вообще.

теперь я понимаю, почему и на сайте у тебя такая каша.
потому, то ты не то, что хорошую стаью отличить не можешь, а даже прочесть до конца, чтобы понять смысл.

а посетители твои - лохи.
если пипл хваает - это еще не повод собой гордиться.
в телевизоре Степаненко тоже зрителям нравится.

Посетителя воспитывать надо.
За лоха - думать надо, пигнками его гнать к хорошему, а не лебезитть и подсовывать "хотите от брата-ламера? Извольте!"

вреда от твоего портала больше, чем пользы.

сделал бы одну ссылку на детайл.пхпклуб.ру
там хоть какой-никакой ценз присутствует.
Название: цикл для вывода в два столбца одного параметра
Отправлено: Mog. от 13 Июня 2004, 10:05:51
[OFF]RomikChef , перестань, пожалуста, писать ответы в стиле хокку :)
[/OFF]
Название: цикл для вывода в два столбца одного параметра
Отправлено: Меняздесьдавнонет от 13 Июня 2004, 10:59:48
Minister
Вообще, конечно, ты хорошее дело делаешь.
Опять же - не воруешь, а ссылки ставить. За одно это тебя можно любить, по сравнению с другими библиотекарями.

Это у меня бзик - в пхп СТОЛЬКО ламеров, лезущих писать свои "статьи", что с этим мутным валом бороться очень сложно.
я, как могу - борюсь.
Снимаю совсем уж одиозныестатьи, вроде курепинской про регистер глобалс.

я не очень понял, приходят ли тебе баг-репорты, так что пара рекомендаций здесь.
ВСЕ статьи Дмитрия Бородина находятся по адресу http://php.spb.ru
все остальное - воровство.
При том, что Бородин - гений, большая часть его статей устарели просто безбожно, а часть была неверной с самого начала

статьи Руслана Курепина лучше вообще убрать. он идиот.