Перейти к содержимому


Партнерская программа Kredov

Разбивание строки с помощью explode()

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 03 Январь 2011 - 18:56

Нужно создать таблицу с данными. Данные находятся в текстовом файле 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 строку) на элементы: дата, покрышки, масло, свечи, всего.
У меня следующий код
$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>';


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


[size="1"]--------------------
Статья: бесплатно создать сайт/size]

 

 

  • 0

#2 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 03 Январь 2011 - 19:58

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

Ну и раз уж вы просите помочь построить таблицу — не забудьте в хтмл таблицу открыть и закрыть:
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>";

  • 0

#3 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 03 Январь 2011 - 20:39

Спасибо! Я думал что в таком случае компилятор укажет на ошибку...
Вот почти весь код, без ХТМЛ вступлений
$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>";

Для меня главное понять принцип работы функции explode(). Мое мнение:
При $i=0 создается ЧИСЛОВОЙ массив $line, в котором ключ 0 => значение 01:44:46 31st, ключ 1 => 3, и так далее... Мы можем обратиться к любому элементу, из нулевого элемента массива $orders. Мы обращаемся к каждой...
Потом $i=1 и все повторяется для следующего элемента массива (второй строки из файла), а предыдущие данные перезаписываются новыми.

Правильно?
  • 0


#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 03 Январь 2011 - 20:39

А почему не поставить нормальные ограничители в текстовом файле? Например, запятую вместо табуляции... и визуально воспринимается лучше и ошибок непредвиденных не будет при сохранении в различных редакторах.
  • 0


#5 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 03 Январь 2011 - 20:50

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


  • 0


#6 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 03 Январь 2011 - 20:52

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

Согласен, просто изначально в книге, по которой я учусь, предложили табуляцию, вот я и решил следовать примеру. Думаю лучше ставить разделитель такой как ||. Не думаю что он часто буде встречаться при заполнении "БД". Запатую предпочитаю не использовать, потому что может быть строка "адреса" в которой в 80% случаях есть запятая ;)
  • 0


#7 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 03 Январь 2011 - 21:18

Banderas,

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

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

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


Оформление форума – IPBSkins.ru