Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вывод содержания файла


Автор: Igor_CH 12.4.2005, 16:26
У меня файл с таким содержимым:
Код

Переменная1::Переменная2:: Переменная3:: Переменная4:: Переменная5::
Переменная1::Переменная2:: Переменная3:: Переменная4:: Переменная5::
Переменная1::Переменная2:: Переменная3:: Переменная4:: Переменная5::
Переменная1::Переменная2:: Переменная3:: Переменная4:: Переменная5::
Переменная1::Переменная2:: Переменная3:: Переменная4:: Переменная5::


Считываю таким образом:

Код

$data_array = file("data/file.dat");
        if (count($data_array) != 0):
                $lines = count ($data_array);  //кол-во строчек в файле
for($i=0;$i<=$lines-1;$i++)
                        {
list($переменная1, $переменная2, $переменная3, $переменная4, $переменная5)= explode("::", $data_array[$i]);


и дальше вывожу
Код

echo "<table><tr><td>$переменная1</td><td>$переменная2</td><td>$переменная3</td><td>$переменная4</td><td>$переменная5</td></tr></table>";

Выводятся столько таблиц сколько строк в файле. Выводится одна таблица под другой. А как сделать что бы выводилось, например, 4 таблицы по горизонтали и далее вниз?

Автор: Akina 12.4.2005, 16:41
Код

echo "<table>";
for ($i=0;$i<=$lines-1;$i++)
{
echo"<tr><td>$переменная1</td><td>$переменная2</td><td>$переменная3</td><td>$переменная4</td><td>$переменная5</td></tr>"
}
echo "</table>";

Автор: Irokez 12.4.2005, 18:40
Цитата(Igor_CH @ 12.4.2005, 16:26)
А как сделать что бы выводилось, например, 4 таблицы по горизонтали и далее вниз?

это лучше средствами HTML сделать. выводить каждую таблицу в DIVах, которым задать ширину 25% от экрана и float: left ...

Автор: Igor_CH 13.4.2005, 07:49
Akina так не получается
Irokez с помощью html не получится сделать

Может меня немного не так поняли, я хочу сделатьт так:

Код

<tr><td>Таблица_Первой_строки</td><td>Таблица_Втотрой_строки</td><td><td>Таблица_Третьей_строки</td></tr>
<tr><td>Таблица_Четвертой_строки</td><td>Таблица_Пятой_строки</td><td><td>Таблица_Шестой_строки</td></tr>
и т.д.

Автор: IZ@TOP 13.4.2005, 08:26
Igor_CH, так тебе Ирокез правильно сказал :

Код

<table width="100%">
<tr><td>

<div style="width:30%; float:left;">$переменная1</div><div style="width:30%; float:left;">$переменная1</div><div style="width:30%; float:left;">$переменная1</div>

</td></tr>
</table>

Автор: Igor_CH 13.4.2005, 08:48
вот такой код получается:
Код

<table width="100%">
<tr><td>
<div style="width:30%; float:left;"><? echo "$name"; ?></div><div style="width:30%; float:left;"><? echo "$name"; ?></div><div style="width:30%; float:left;"><? echo "$name"; ?></div>
</td></tr>
</table>

Вот что мы видем в браузере:
Переменная1($name)_ПЕРВОЙ_строки | Переменная1($name)_ПЕРВОЙ_строки | Переменная1($name)_ПЕРВОЙ_строки

а я хочу
Переменная1($name)_ПЕРВОЙ_строки | Переменная1($name)_ВТОРОЙ_строки | Переменная1($name)_ТРЕТЕЙ_строки

Автор: Akina 13.4.2005, 09:20
Цитата(Igor_CH @ 13.4.2005, 08:49)
Akina так не получается

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

Автор: Igor_CH 13.4.2005, 09:46
получился такой код:
Код

<?php
echo "<table>"."\n";
echo "<tr>"."\n";
      
$data_array = file("data/file.dat");
$lines = count ($data_array);  //кол-во строчек в файле
$i=0;
while ($i <=$lines-1)
                
                        {

$cols = "3"; //кол-во колонок                   
if (is_int($i / $cols)) {
                        
list($name,$name1,$name2,$name3,$name4,$name5,$name6)= explode("::", $data_array[$i]);
echo "<td>";?><? echo "$name1</td>"."\n";
echo "</tr><tr>"."\n";                        
                     }
else
{
list($name,$name1,$name2,$name3,$name4,$name5,$name6)= explode("::", $data_array[$i]);
echo "<td>";?><? echo "$name1</td>"."\n";
}
$i++;
  }
echo "</tr>"."\n";
echo "</table>"."\n";                        
?>

файл file.dat
имеет такое содержание
1::2::3::4::5::6
1::2::3::4::5::6
1::2::3::4::5::6
т.е. $name1 =1, $name2 =2, ....

Вывод на экране получается такой:
1
2 3 4
5 6 7
8 9

Почему первая строка отдельна от всех?

Автор: InfMag 14.4.2005, 06:58
Igor_CH
15: list($name,$name1,$name2,$name3,$name4,$name5,$name6)= explode("::", $data_array[$i]);
16: echo "<td>";?><? echo "$name1</td>"."\n";
17: echo "</tr><tr>"."\n";
Потому что ты сначала пишешь <tr> тока с одним <td>.
Вот попробуй:
Код

<?php
$data_array = file("data/file.dat");
$lines = sizeof($data_array);
echo "<table>\n";
echo "<tr>\n";
for ($i=0; $i<=$lines-1; $i++)
{
    $cols = "3";
    if (is_int($i / $cols))
    {
        list($name,$name1,$name2,$name3,$name4,$name5,$name6) = explode("::", $data_array[$i]);
        echo "<td>$name1</td>\n";
        echo "</tr>\n<tr>\n";
    } else {
        list($name,$name1,$name2,$name3,$name4,$name5,$name6) = explode("::", $data_array[$i]);
        echo "<td>$name1</td>\n";
    }
}
echo "</tr>\n";
echo "</table>\n";
?>

Автор: Igor_CH 14.4.2005, 09:19
Все ровно получается
1
2 3 4
5 6 7
8 9
если в этой строке for ($i=0; $i<=$lines-1; $i++) поменять $i=0 на $i=1 то
2 3 4
5 6 7
8 9
но мне надо что бы и первая строка читалась

Автор: InfMag 14.4.2005, 14:03
Igor_CH
Я так толком и не понял, что тебе нужно. Покажи какой результат должен быть уже в HTML из:
1::2::3::4::5::6
1::2::3::4::5::6
1::2::3::4::5::6

Автор: Igor_CH 14.4.2005, 15:21
в html
<tr><td>1,2,3,4,5,6(ПЕРВОЙ СТРОКИ)</td><td>1,2,3,4,5,6(ВТОРОЙ СТРОКИ)</td><td>1,2,3,4,5,6(ТРЕТЕЙ СТРОКИ)</td></tr>
<tr><td>1,2,3,4,5,6(ЧЕТВЕРТОЙ СТРОКИ)</td><td>1,2,3,4,5,6(ПЯТОЙ СТРОКИ)</td><td>1,2,3,4,5,6(ШЕСТОЙ СТРОКИ)</td></tr>
и т.д.

т.е. в каждой я чейки ОДНА СТРОКА

P.S. извеняюсь сложно расказать

Автор: InfMag 14.4.2005, 19:42
Igor_CH
Цитата
P.S. извеняюсь сложно расказать

Нет, щас уже попонятей будет, а то ты писал:
Цитата
echo "<table><tr><td>$переменная1</td><td>$переменная2</td><td>$переменная3</td><td>$переменная4</td><td>$переменная5</td></tr></table>";

Вот я и думал: а где же тут проблема?

Итак, щас поковыряю. smile

Автор: InfMag 14.4.2005, 19:52
Вроде вот, если я тебя правильно понял:
Файл "data/file.dat":
Код

1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::
1::2::3::4::5::6::

Отмечаю: Ставь в конце каждой строчки еще ::, потому, что, если ты эту фигню не ставишь, то он пробел к 6-и приставит, или даже может \n поставить. smile
Сам файл PHP:
Код

<?php
$data_array = file("data/file.dat");
$lines = sizeof($data_array);
echo "<table>\n";
echo "<tr>\n";
for ($i=1; $i<=$lines; $i++)
{
    $name = explode("::", $data_array[$i-1]);
    $cols = "3";
    echo "<td>$name[0], $name[1], $name[2], $name[3], $name[4], $name[5]</td>\n";
    if ($i%$cols == 0 && $i != $lines) echo "</tr>\n<tr>\n";
}
echo "</tr>\n";
echo "</table>\n";
?>

Автор: Igor_CH 15.4.2005, 13:11
Спасибо так получилось!

Автор: Igor_CH 16.4.2005, 10:41
Дальше я делаю деление по страницам, т.е. на первой странице от 1 до 10 строки, на второй от 11 до 20 и так далее.
Но если строчек 15, а я нахожусь на второй странице, то ошибки нет переменных с 16 до 20 строки, как убрать ошибки?

Автор: InfMag 17.4.2005, 00:52
Вот, я че-т уже натыкал:
Код

$data_array = file("data/file.dat");
$lines = sizeof($data_array);
if (isset($_GET['page'])) $page = $_GET['page']; else $page = 1;
if ($page <= 0) $page = 1;
$cols = 3;
$maxmess = 10*$cols;
$pages = (int)(($lines+$maxmess-1) / $maxmess);
$from = $lines - ($page*$maxmess-1);
$to = $lines - (($page-1)*$maxmess);
$lnks = "Страницы: /";
for ($i=1; $i<=$pages; $i++) if ($i == $page) $lnks .= " <b>$i</b> /"; else $lnks .= " <a href=\"?page=$i\">$i</a> /";
echo "<table cellpadding=10>\n";
echo "<tr><td colspan=\"$cols\" align=center>$lnks</td></tr>\n";
echo "<tr>\n";
for ($i=$from-1, $n=$to+1; $i<$to; $i++, $n--)
{
    $name = explode("::", $data_array[$i-1]);
    if ($n%$cols == 0 && $i != $lines) echo "</tr>\n<tr>\n";
    echo "<td>$name[0], $name[1], $name[2], $name[3], $name[4], $name[5]</td>\n";
}
echo "</tr>\n";
echo "</table>\n";

Но при переходе на вторую страницу - ошибки...

Автор: InfMag 17.4.2005, 01:08
Надеюсь это то, что ты хотел. Если тебе нужен листинг не от конца, а от начала, то скажи. smile
Код

$data_array = file("data/file.dat");
$lines = sizeof($data_array);
if (isset($_GET['page'])) $page = $_GET['page']; else $page = 1;
if ($page <= 0) $page = 1;
$cols = 3;
$maxmess = 10*$cols;
$pages = (int)(($lines+$maxmess-1) / $maxmess);
$from = $lines - ($page*$maxmess-1);
$to = $lines - (($page-1)*$maxmess);
$lnks = "Страницы: /";
for ($i=1; $i<=$pages; $i++) if ($i == $page) $lnks .= " <b>$i</b> /"; else $lnks .= " <a href=\"?page=$i\">$i</a> /";
echo "<table cellpadding=10>\n";
echo "<tr><td colspan=\"$cols\" align=center>$lnks</td></tr>\n";
echo "<tr>\n";
$m=0;
for ($i=$from-1; $i<$to; $i++)
{
    if (!empty($data_array[$i-1]))
    {
        $name = explode("::", $data_array[$i-1]);
        if ($m%$cols == 0 && $i != $lines) echo "</tr>\n<tr>\n";
        echo "<td>$name[0], $name[1], $name[2], $name[3], $name[4], $name[5]</td>\n";
        $m++;
    }
}
echo "</tr>\n";
echo "</table>\n";

Автор: Igor_CH 18.4.2005, 08:53
Спасибо! Это только начало кода, вопросы еще будут smile
При коде выше страницы не совсем правильно формируются.
Например, у нас 13 строчек в файле, выводим их в 3 колонки по 5 строк, то на страницы мы видим такой порядок вывода строк:
1 страница:
9 10 11
12 13
2 страница:
4 5 6
7 8
3 страница:
1 2 3

А логичней было бы так:
1 страница:
13 12 11
10 9
2 страница:
8 7 6
5 4
3 страница:
3 2 1

Автор: Igor_CH 19.4.2005, 10:49
строчку
Код

for ($i=$from-1; $i<$to; $i++)

поменаля на
Код

for($i=$to-1;$i>=$from-1;$i--)

теперь все правильно
всем кто помогал спасибо!!!

Автор: Igor_CH 19.4.2005, 11:06
Мы получаем файл с таблицей в каждой ячейки таблицы переменные с строки в файле file.dat. Далее я делаю одну из переменных (name[0]) ссылкой.
Можно ли сделать так, что бы щелкая по этой ссылке открывалось бы новое окно в котором были бы переменные именно этой строки?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)