X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Разбивание строки с помощью explode(), помогите построить таблицу
Banderas
Banderas
Topic Starter сообщение 3.1.2011, 19:56; Ответить: Banderas
Сообщение #1


Нужно создать таблицу с данными. Данные находятся в текстовом файле orders.txt
01:44:46 31st    3 покрышек    2 масла    12 свечей     всего: $441.6    
01:45:30 31st    12 покрышек    4 масла    34 свечей     всего: $1651.2    
19:45:58 1st    3 покрышек    5 масла    23 свечей     всего: $530.4    
19:48:39 1st    5 покрышек    34 масла     1 свечей     всего: $1012.8    
20:01:10 1st    32 покрышек    1 масла    12 свечей     всего: $3909.6    
20:01:10 1st    32 покрышек    1 масла    12 свечей     всего: $3909.6    
20:04:36 1st    2 покрышек    23 масла     45 свечей     всего: $732


Нужно разбить элемент массива (1 строку) на элементы: дата, покрышки, масло, свечи, всего.
У меня следующий код
[php]$D_ROOT = $_SERVER['DOCUMENT_ROOT'];
$orders = file("$D_ROOT/../www/orders/orders.txt");

for ($i=0;$i<count($orders);$i++) {
$line = explode("\t", $otders[$i]);

echo "<tr align='center'>
<td>$line[0]</td>
<td>$line[1]</td>
<td>$line[2]</td>
<td>$line[3]</td>
<td>$line[4]</td>
</tr>";
}

echo '<pre>';
print_r($orders);
echo '</pre>';[/php]

В итоге массив $line заполняется, значит табличка тоже пуста. В чем проблема?


[size="1"]--------------------
Статья: бесплатно создать сайт/size]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
сообщение 3.1.2011, 20:58; Ответить: yury_mw
Сообщение #2


Banderas,
вы в последних темах специализируетесь на очепятках ;)
$line = explode("\t", $otders[$i]);

Ну и раз уж вы просите помочь построить таблицу — не забудьте в хтмл таблицу открыть и закрыть:
[php]echo "<table>";
for ($i=0;$i<count($orders);$i++) {
$line = explode("\t", $orders[$i]);

echo "<tr align='center'>
<td>$line[0]</td>
<td>$line[1]</td>
<td>$line[2]</td>
<td>$line[3]</td>
<td>$line[4]</td>
</tr>";
}
echo "</table>";[/php]


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 3.1.2011, 21:39; Ответить: Banderas
Сообщение #3


Спасибо! Я думал что в таком случае компилятор укажет на ошибку...
Вот почти весь код, без ХТМЛ вступлений
[php]$header = array('Дата', 'Покрышки', 'Масла', 'Свечи', 'Сумма');

echo <<<HTML
<table border='0' cellspacing='10'>
<tr bgcolor='e7e7e7'>
HTML;

foreach($header as $key => $value) echo "<td>$value</td>";
echo "</tr>";

$D_ROOT = $_SERVER['DOCUMENT_ROOT'];
$orders = file("$D_ROOT/../www/orders/orders.txt");

for ($i=0;$i<count($orders);$i++) {
$line = explode("\t", $orders[$i]);
for ($k=1;$k<4;$k++) $line[$k] = intval($line[$k]);
echo "<tr>";
for ($j=0;$j<count($line);$j++) echo "<td>$line[$j]</td>";
echo "</tr>";
}
echo "</table>";[/php]
Для меня главное понять принцип работы функции explode(). Мое мнение:
При $i=0 создается ЧИСЛОВОЙ массив $line, в котором ключ 0 => значение 01:44:46 31st, ключ 1 => 3, и так далее... Мы можем обратиться к любому элементу, из нулевого элемента массива $orders. Мы обращаемся к каждой...
Потом $i=1 и все повторяется для следующего элемента массива (второй строки из файла), а предыдущие данные перезаписываются новыми.

Правильно?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 3.1.2011, 21:39; Ответить: matroskin8
Сообщение #4


А почему не поставить нормальные ограничители в текстовом файле? Например, запятую вместо табуляции... и визуально воспринимается лучше и ошибок непредвиденных не будет при сохранении в различных редакторах.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 3.1.2011, 21:50; Ответить: matroskin8
Сообщение #5


Banderas, Правильно. Файл считывается построчно в массив $orders. Каждый элемент этого массива - это 1 строка. Затем в цикле при помощи ф-ции explode() строка разбивается на элементы (они отделены друг от друга в исходной строке разделителем - сепаратором), эти элементы помещаются в массив $line и каждый элемент выводится в отдельной ячейке строки таблицы, а все элементы массива выводятся в отдельной строке таблицы. Затем следующий элемент массива $orders ($orders[1]) разбивается согласно разделителям, помещается в массив $line, затирая предыдущие данные там и вновь выводится строка таблицы, заполняемая элементами массива $line... цикл повторяется до конца массива $orders.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 3.1.2011, 21:52; Ответить: Banderas
Сообщение #6


(matroskin8 @ 3.1.2011, 19:39) *
А почему не поставить нормальные ограничители в текстовом файле? Например, запятую вместо табуляции... и визуально воспринимается лучше и ошибок непредвиденных не будет при сохранении в различных редакторах.

Согласен, просто изначально в книге, по которой я учусь, предложили табуляцию, вот я и решил следовать примеру. Думаю лучше ставить разделитель такой как ||. Не думаю что он часто буде встречаться при заполнении "БД". Запатую предпочитаю не использовать, потому что может быть строка "адреса" в которой в 80% случаях есть запятая ;)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
сообщение 3.1.2011, 22:18; Ответить: yury_mw
Сообщение #7


Banderas,
Спасибо! Я думал что в таком случае компилятор укажет на ошибку...

Во-первых, на всякий случай, php — не компилируемый язык, а интерпретируемый.
Т.е. выполняется по мере чтения интерпретатором файла с php-кодом до тех пор пока не встретится конец файла или ошибка.
(В случае компилируемого языка генерируется исполнимый код, который затем выполняется).

Во-вторых, ошибки в вашем коде нет, просто вы строкой с опечаткой, фактически создали новый пустой массив $otders[]. Поэтому интерпретатор php ни на какие ошибки указать не мог.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Раскройте свой потенциал заработка с помощью 2x2 Media Network — вашего пути к выгодным предложениям CPA!
Присоединяйтесь к 2x2 Media Network, вашему надежному партнеру в мире
11 2x2MediaLimited 3299 18.4.2024, 4:22
автор: 2x2MediaLimited
Горячая тема (нет новых ответов) Проверка позиций сайтов в поисковых системах с помощью Positon.ru
Мониторинг продвижения сайтов
183 Positon 179804 12.4.2024, 8:32
автор: Positon
Открытая тема (нет новых ответов) WEB и SMM дизайн — решение ваших бизнес задач с помощью дизайна
8 justburger 5342 6.7.2020, 9:18
автор: justburger
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыЦелевой трафик +30% за 4 месяца с помощью SEO продвижения у Хачатура - отзывы и кейсы в топике
6 Mikejones 3461 9.7.2019, 10:47
автор: Mikejones
Открытая тема (нет новых ответов) Гарантированно привлечем от 1000 подписчиков за 1 месяц с помощью комплексного продвижения
8 masija_coke 3221 1.1.2019, 0:59
автор: masija_coke


 



RSS Текстовая версия Сейчас: 25.4.2024, 22:14
Дизайн