Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Гость Гость
|
Добавлено: Сб Авг 21 2004 23:05 Заголовок сообщения: array(PHP) |
|
|
Может кто знает как сделать чтобы в этой строке: $pics=array($table_full,$table_full,$table_full); $table_full было столько же сколько и строк в файле test.txt ? |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Вс Авг 22 2004 09:35 Заголовок сообщения: |
|
|
Во первых надо узнать сколько строк в test.txt.
Это можно сделать открыв файл функцией fopen, и потом прочитать его функцией fread.
Но есть способ проще.
array file (string filename [, int use_include_path]);
Функция file открывает файл и сразу зачитывает его, возвращает массив, каждый элемент которого это строка из файла.
Для твоего случая:
$pics=file("test.txt"); |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Вс Авг 22 2004 09:56 Заголовок сообщения: |
|
|
Нет это не то, если читать $pics=file("test.txt");, то он будет выводить $table_full как текст, а мне то нужно чтобы он выводил переменую или как это называеться, в $table_full у меня прописана таблица, а таким образом он выведет это как обычный текст. |
|
Вернуться к началу |
|
|
Spencer
Зарегистрирован: 08.08.2004 Сообщения: 54 Откуда: Moscow
|
Добавлено: Вс Авг 22 2004 23:14 Заголовок сообщения: |
|
|
Если я правильно тебя понял - тебе нужно не содержимое массива, а его величина. Для этих целей в PHP есть функция count(). Т.е.,
Код: | .......
$f = fopen("file.txt","rt") or die ("error!");
while(!feof($f))
{
$File[] = fgets($f,50);
}
fclose($f);
$table_full = count($File);
......... |
тебе нужно что-то подобное.
Рад, если натолкнул на правильное решение. |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Пн Авг 23 2004 01:18 Заголовок сообщения: |
|
|
Хм, а зачем цикл то тут я не понял.
Пишем тогда уж:
Код: |
$ttt=file("test.txt");
$table_full=count($ttt);
|
Хотя вместо count, я использую sizeof, по причине того, что даже если массив ($ttt) пустой, то count все равно возвратит единицу.
Да и таким образом, в любом случае мы переписываем переменную $table_full, а уважаемый Гость говорит что у него там уже прописана таблица...
2Гость: объясни нормально что ты хочешь сделать?
А то фразы: "нужно чтобы он выводил переменую или как это называеться" и в "$table_full у меня прописана таблица", лично мне не очень понятны.
И не пойму зачем в массиве хранить кучу одинаковых значений? |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Пн Авг 23 2004 04:54 Заголовок сообщения: |
|
|
Напишу свою проблему полностью, я её тут не стал писать т.к спрашивал уже на других форумах, но не кто так и не сказал как сделать а говорили гони деньги, новерно прошу много, вот решил спросить хоть часть
Вобщем написал я скрипт который сохраняет текст в файле затем это все выводит в таблицу, все было нормально пока я не добавил большое количество таблиц, дело в том что все они встали в 1 ряд, а мне нужно чтобы в 1 ряду было 5 таблиц. Вот и мучиюсь уже неделю, не как не могу сделать и не кто не может помочь. Дали мне ссылку, а там в форуме человек просил чтобы у него было по 3 картинки в ряду. Ну там картинки, а мне нужно чтобы вставлял таблицу, причем в этой таблицы вставляеться текст из файла. Ну вобщем мучию уже 3 день этот скрипт так и не могу сделать как мне надо
Ну вот в array я вставляю переменую только потому что всю таблицу в array я вставить не могу т.к она большая.
Может на этом форуме найдуться добрые люди и помогут мне
Вот скрипт который я мучию, я повырезал таблицы чтобы не засорять форум ну они не короткие так сказать, но если надо могу и с ними выложить.
Код: | <?
function get_rows()
//тут функция которая считает строки в файле не как не относиться к разбиению таблиц на ряды
}
echo "главная таблица в которой небольшие таблицы с информацией с файла";
$fp = fopen ("base/test.txt", "r+");
while (!feof($fp))
{
$read = fgets($fp, 1000);
list($text,$ffile,$ppic,$ffile_size_b) = split('#',$read);
$table_full = "тут сама таблица которая содержит в себе информацию с файла";
$tables=array($table_full,$table_full,$table_full);
$col = 5;
$all = count($tables);
echo "<table border='1' align='center'><tr>";
for ($i=0;$i<$all;$i++) {
if (($i % $col)==0 and $i!=0)
echo "</tr>\n<tr>\n";
echo "<td>".$tables[$i]."</td>\r\n";
}
}
fclose ($fp);
echo "
</td>
</tr>
</table>
<tr bgcolor='#525252' valign='middle'>
<td colspan='2'>
<div align='center'>";
if(file_exists("base/test.txt")) {
echo "
<span style='font-size: 10; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; color: #000000;'>
$array всего: <b>
".get_rows();};
echo "</div>
</td>
</tr>
</table>
</body>";
?> |
|
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Пн Авг 23 2004 04:58 Заголовок сообщения: |
|
|
Ах да забыл про $table_full и array. Вот смотри в array содержиться количество таблиц верно? у меня в файле например 7 строчек. 1 строка = 1 таблица, мне нужно чтобы в array вставлялось столько $table_full сколько строк в файле и тем самым получалось количество таблиц равное количеству строк в файле. |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Пн Авг 23 2004 07:11 Заголовок сообщения: |
|
|
2Гость: Не стал я глубоко вдаваться в подробности твоего скрипта. Главное я вроде понял что ты хочешь:
Понял я так: есть большая таблица (главная) в каждой ячейке этой таблица должна содержатся еще одна таблица, причем эта каждая таблица должна браться из файла в котором 1 строка это есть наша (вторая таблица). И в завершении тебе надо чтобывсе это выводилось в 5 столбцов.
Решил я написать быстренько с нуля, вот что получилось:
Код: |
<?php
$col=5; //переменная которая определяет кол-во столбцов
//цикл верхушки главной таблицы
echo "<table width=80% border=1><tr>";
for ($j=1;$j<=$col;$j++)
{
echo "<td>Таблица $j</td>\n";
}
echo "</tr>";
//главная часть
$all_file=file("test.txt");
for ($i=1;$i<=sizeof($all_file);$i++)
{
if ($i==0) echo "<tr>\n";
$table_info=explode("#",$all_file[$i-1]);
echo "<td><table border=1><tr><td>$table_info[0]</td><td>$table_info[1]</td></tr><tr><td>$table_info[2]</td><td>$table_info[3]</td></tr></table></td>\n";
if (((is_int($i/$col)) || ($i==sizeof($all_file))) && ($i!=0))
{
echo "</tr>\n<tr>\n";
}
}
//финиш
echo "</table>";
?>
|
Был создан файл с содержимым (на нем все проверялось):
Код: |
ggg#ggg#ggg#ggg
uuu#uuu#uuu#uuu
iii#iii#iii#iii
ooo#ooo#ooo#ooo
ppp#ppp#ppp#ppp
rrr#rrr#rrr#rrr
eee#eee#eee#eee
www#www#www#www
mmm#mmm#mmm#mmm
nnn#nnn#nnn#nnn
444#444#444#444
|
Скрипт естественно можно оптимизировать, но это уже твое дело )
Если что не ясно пиши....
P.S.: скрипт рабочий, но я стустя минуту после поста мессаги заметил маленький глюк, это как домашнее задание - найти глюк |
|
Вернуться к началу |
|
|
гость Гость
|
Добавлено: Пн Авг 23 2004 08:01 Заголовок сообщения: |
|
|
Спасибо. Я ещё не пробывал изменить его под себя, глянул его быстренько и кажеться опять не то.
таблица у меня береться не с файла, с файла у меня береться только текст который в неё вставляеться. Все косяки с предыдущим скриптом были в том что чтение файла идет с while, где закрыть его я не знаю, пробывал в разных местах и всегда получал не то что хотел. Под while у меня находиться таблица в которую вставляеться текст из файла, и ниже(тоже в while) находился скрипт который разбивал, и у меня получалось куча одинаковых таблиц.
Мне нужно этот скрипт вписать так чтобы у меня не получались одинаковые таблицы.
$fp = fopen ("test.txt", "r+");
while (!feof($fp))
{
$read = fgets($fp, 1000);
list($text,$ffile,$ppic,$ffile_size_b) = split('#',$read);
echo "
<td>
<table width='147' border='1' cellspacing='0' cellpadding='0' bordercolor='#575757' align='center'>
<td width='150' background='frames/template/pictures/table_z_bg.gif' bgcolor='#2D2D2D'>
<div align='center'><span style='font-size: 9; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; color: #939393;'><b>$text</b></div>
</td>
</tr>
<tr>
<td colspan='2'>
<div align='center'><img src='upload/pictures/$ppic' align='center'></div>
</td>
</tr>
<tr bgcolor='#525252'>
<td colspan='2'>
<div align='center'><span style='font-size: 10; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; color: #000000;'>Размер:<b> $ffile_size_b</b> кб</div>
</td>
</tr>
<tr bgcolor='#666666'>
<td colspan='2'>
<div align='center'><span style='font-size: 10; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; color: #000000;'><a href='upload/files/$ffile'>Скачать</div>
</td>
</tr>
</table>
</td>
";
}
fclose($fp); |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Пн Авг 23 2004 08:10 Заголовок сообщения: |
|
|
Все разобрался, слишком быстро посмотрел скрипт все оказалось очень просто. Спасибо ещё раз, целую неделю по форумам хожу спрашиваю + мучию всякие скрипты часами и ты так быстро избавил меня от этого |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Пн Авг 23 2004 09:17 Заголовок сообщения: |
|
|
2Гость: Был рад помочь. А миниглюк там в том что когда последняя ячейка главной таблицы заполняется другой таблицей, там появляется лишний "<tr>".
Это строка echo "</tr>\n<tr>\n";
Подправишь я надеюсь. |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Пн Авг 23 2004 09:29 Заголовок сообщения: |
|
|
Да я это уже убрал, спасибо ещё раз |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Пн Авг 23 2004 20:29 Заголовок сообщения: |
|
|
Сидел добавлял что мне нужно и появилась ещё 1 проблема Как разбить на страницы? чтобы было например 5 рядов на 1 странице? А то у меня 80-100 таблиц, получаеться 16-20 рядов, это очень много. |
|
Вернуться к началу |
|
|
Slava_ Гость
|
Добавлено: Пн Авг 23 2004 21:11 Заголовок сообщения: |
|
|
Хоть я и опоздал, т.к. оквет найден.
я все равно напишу как я решил эту проблему, осуществлялся вывод картинок.
выглядит это примерно так:
Код: | print "<table><tr>";
$array=//из выводимых таблиц
for ($i=0;$i<count($array);$i++){
$table=implode("разделитель",$array[i]);
print"<td>$table</td>";
if($i%5==0){
print"</tr><tr>";
}
}
print"</tr></table>"; |
что касается постраничного вывода, наверно надо и своей головой до этого доходить. Или купить готовый скрипт, тагда точно все работать будет как надо. |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Пн Авг 23 2004 21:45 Заголовок сообщения: |
|
|
Своей головой можно до этого дайти если знать php, а я его знаю 2 едели и для меня это сложный скрипт. Платить денги за 10 строчек я не собираюсь. |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Вт Авг 24 2004 01:37 Заголовок сообщения: |
|
|
2Гость: фраза "я его знаю 2 недели" звучит...
Теперь насчет постраничного вывода:
Весь код писать я тебе не буду - должен додумать.
Во первых тебе понадобится переменная типа $page, которая будет передаватся этому скрипту.
Будет такой кусочек тоже: if (!isset($page)) $page=1;
то есть если переменная $page не задана значит она равно единице.
Далее нужно вывести ряд линков - для перемещения пользователя по страницам. Типа: [1] [2] [3] и т.д. Сколько таких будет определишь делением и округлением до большого целого.
И циклом от 1 до всего страниц выведешь.
Теперь о выводе:
Тебе нужно просто менять (я про свой скрипт) начальное и конечное значение переменной $i.
Допустим пользователь зашел просто на страницу, тогда $page равно единице.
Тогда код примет вид:
.........................
$i=$page*$col-($col-1); //1*5-(5-1)=1
$b=$page*$col; //1*5=5
for ($i;$i<=$b;$i++) {
.........................
В результате ты выводишь: с 1 по 5 влючительно.
Теперь пускай пользователь нажал на линк [2] (<a href="script.php?page=2">[2]</a>).
Переменная $page=2;
Считаем:
$i=2*5-(5-1)=6;
$b=2*5;
Выводим с 6 по 10 включительно.
Ну и т.д. |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Вт Авг 24 2004 08:53 Заголовок сообщения: |
|
|
Что-то я не понел как выводить, попробывал я этот скрипт например пробывл делать так, посмотреть что будет.
Код: | if (!isset($page)) $page=1;
$col = "7";
$i=$page*$col-($col-1); //1*5-(5-1)=1 ;
$b=$page*$col; //1*5=5 ;
for ($i;$i<=$b;$i++) {
echo "1";
} |
Получил 1111111, это что? если я правельно понел, то там и должно быть то что выводиться на 1 странице, если я туда поставлю то что мне надо, то у меня поучиться 7 одинаковых главных таблиц+маленьких куча Как это сделать? чему $col должен быть равен?
дальше ставлю <a href="script.php?page=2">[2]</a>, нажимаю на 2 поидеи он же должен показать хоть что-то? он нефига не показывает |
|
Вернуться к началу |
|
|
Slava_ Гость
|
Добавлено: Вт Авг 24 2004 16:10 Заголовок сообщения: |
|
|
Насчет денег, это я не о себе. Это я в общем так подумал. Кстати, там гораздо более 10 строк кода.( это я с острил)
А для постраничного вывода, всегото, нужна переменная(тип integer) определяющая количество элементов массива выводимых на одной странице, и позицию начала чтения массива при выводе на следующей странице, и т.д.
Надеюсь что помог хоть чемто. |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Вт Авг 24 2004 16:32 Заголовок сообщения: |
|
|
Слава если бы я просил целый сайт или сложный и большой скрипт, тогда уже можно было говорить о деньгах, а так я думаю это не сложный скрипт для знающих php.
Цитата: | А для постраничного вывода, всегото, нужна переменная(тип integer) определяющая количество элементов массива выводимых на одной странице, и позицию начала чтения массива при выводе на следующей странице, и т.д. |
Если ты был внимателен, то мог прочитать в моём сообщении: я знаю php 2 недели. Если ты это прочитал, то мог бы догадаться что я не пойму нечего в таком объяснении. Если можеш, то поподробней. |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Ср Авг 25 2004 01:36 Заголовок сообщения: |
|
|
2Гость:
if (!isset($page)) $page=1;
$col = "7";
$i=$page*$col-($col-1); //1*5-(5-1)=1 ;
$b=$page*$col; //1*5=5 ;
for ($i;$i<=$b;$i++) {
echo "1";
}
И ты спрашиваешь что такое "1111111", идем по строчно:
1: если переменная $page не опеределена, она она равна 1
2: определили $col (хотя не пойму зачем ее писать в кавычках - это же число)
3: считаем перемменную $i=1*7-(7-1)=1;
4: считаем $b=1*7=7;
5: цикл for (1;1<=7;добавлять к числу 1)
6: вывести единицу
Логично - цикл прокрутился 7 раз и вывел семь единиц.
Теперь дальше.
Как этот цикл выведет тебе 7 главных таблиц, если главную таблицу ты уже создал выше. См. мой скрипт первый.
Теперь насчет script.php?page=2. Если переменная со строки взялась И имя твоего сприпта script.php. То переменная $page должна равнятся двум. Ну и дальше аналогия с первым случаем.
У тебя простой план:
рисуешь главную таблицу, потом читаешь массив с файла,
на основе переменной $page вычисляешь с какого элемента по какой выводить, крутишь цикл в котором по условиям рисуется 5 рядов или сколько там надо.... см. 1 скрипт
Поправка: $col в первом скрипте, это не та переменная $col которая во второй. Переименую $col, где нибудь в одном месте в другую.
P.S.: тебе не кажется что пора в руки книжку брать и читать основы создание цуиклов, условий и т.д. |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Ср Авг 25 2004 11:59 Заголовок сообщения: |
|
|
Спасибо алмаз я все равно нечего не понел, это для меня ещё слишком сложно.
Нащет книг, они мне не нужны, мне надо только сайт доделать и все. Серьезно изучать php мне пока что не нужно |
|
Вернуться к началу |
|
|
|