подскажите пожалуйста. не могу решить такую задачу: есть файл csv(большой список 5000 позиций) есть скрипт, выводящий этот файл в виду таблицы PHP: <?php $data = File("33.csv"); echo "<b><h2><center>Прайс-лист</b></h2></center>"; echo "<center><table border=0><tr>"; $dat_arr = explode(";", $data[0]); //первая строка таблицы for ($p=0;$p<count($dat_arr);$p++) { echo "<td bgcolor=lightblue><center><b>$dat_arr[$p]"; } echo "</tr>"; //следующие строки for ($i=1;$i<count($data);$i++) { $data_array = explode(";", $data[$i]); echo "<tr>"; for ($f=0;$f<count($data_array);$f++) { echo "<td bgcolor=orange><center><b>$data_array[$f]"; } echo "</tr>"; } echo "</table></center>"; //конец таблицы данных ?> таблица получается хорошая, но очень длинная, поэтому решил разбить её на страницы, хоть по 300 позиций. нашёл скрипт разбиения на страницы (работает нормально только если сам по себе без скрипта предыдущего), а вместе не пойму как заставить их работать. Я начинающий ПХП-шник и зашёл в тупик, подставлял в разные части скрипта, менял переменные - ничего PHP: <?php $array = file('33.csv'); $count = count($array); $list = 10; if (empty($_GET['page'])) { $page = 1; } else { $page = (int) $_GET['page']; } $j = ($count-1)-(($page-1)*$list); $i = $j-$list; for(; $i<$j && $j>=0; $j--) { echo $array[$j]; } echo '<font color="#ffffff" size="5">Страницы: </font>'."\n"; $all = ceil($count/$list); for ($i=1;$i<=$all;$i++) { if ($page==$i) { echo '<strong><font color="#ffffff">'.$i.'</font></strong> '; } else { echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a> '."\n"; } } ?> хотелось бы сделать ещё чтоб первая строчка оставалась на каждой странице одна и та же(шапка таблицы), но для начала надо разобраться с постраничным выводом таблицы. И ещё вопрос: по тому пути ли я пошёл? У меня есть файл csv(прайс-лист), вывожу его на страничку сайта следующим образом. -удобно ли будет сделать поиск по этим данным если они будут разбиты на несколько страниц? -А может лучше загрузить его в БД и строить таблицу оттуда? -или может лучше сделать поиск по файлу без вывода его на страницу сайта, а выводить только запрашиваемую информацию пользователем из файла с помощью поиска?
1)Я бы загрузил бы данные в таблицу и использовал SQL для выборки и поиска. Если использовать файл напрямую, то все придется кодировать самому 2) для считывания данных из CSV файла я бы использовал функцию fgetcsv 3) про постраничную навигацию можешь почитать здесь http://www.php.ru/forum/viewtopic.php?t=30703
решил разбираться по порядку: попытался сделать вывод через fgetcsv и вот что получилось PHP: <?php $handle = fopen("33.csv", "r"); echo "<center><table>"; while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { echo "<tr>"; echo "<td bgcolor=lightblue>$data[0]</td><td bgcolor=yellow>$data[1]</td><td bgcolor=lightgreen>$data[2]</td><td>$data[3]</td><td bgcolor=orange>$data[4]</td>"; echo "</tr>"; //echo "$data[0] <br>"; //echo "$data[1] <br>"; //echo "$data[2] <br>"; //echo "$data[3] <br>"; //echo "$data[4] <br>\n"; } echo "</table></center>"; fclose($handle); ?> почему сделал так? PHP: echo "<td bgcolor=lightblue>$data[0]</td><td bgcolor=yellow>$data[1]</td><td bgcolor=lightgreen>$data[2]</td><td>$data[3]</td><td bgcolor=orange>$data[4]</td>"; потому что PHP: echo "$data[0] <br>"; echo "$data[1] <br>"; echo "$data[2] <br>"; echo "$data[3] <br>"; выводит данные по столбцам!!! хотя в мануале к функции fgetcsv написано что выводится построчно... таблица рисуется красиво, но по столбцам. объясните пожалуйста кому не трудно.
1) fgetcsv считывает строку Excel в массив 2) выводит "по столбцам" из-за <br>. Если хочешь вывести строку в строку то нужно вот так PHP: echo "$data[0] $data[1] $data[2] $data[3] <br>";
нет проблема точно не в <br>, если убираю его то выводит просто первый столбик в строку. вот кусок файла csv Код (Text): Оригинальный №;Неоригинальный №;Наименование;Производитель;Цена 2K0 511 413 D;;Втулка стабилизатора;VAG;28,88 321 498 625 E;EVR5426;Подшипник;Ruville;213,26 321 615 301 D;24.0120-0128.1;Диск тормозной;ATE;333,84 333 513 425;FE08071;Пыльник;Febi;30,47 357 121 140;;Заглушка;VAG;38,44 357 199 402 B;10188 01;Подушка;Lemforder;264,61 256 725 301 J;;Бумага;Epson;256,3 256 725 301 J;;Бумага;Epson;256,3 357 407 182;10203 01;С/блок;Lemforder;24,88 357 412 329;10240 01;Опора;Lemforder;78,32 2K0 511 413 D;;Втулка стабилизатора;VAG;28,88 321 498 625 E;EVR5426;Подшипник;Ruville;213,26 321 615 301 D;24.0120-0128.1;Диск тормозной;ATE;333,84 333 513 425;FE08071;Пыльник;Febi;30,47 357 121 140;;Заглушка;VAG;38,44 вот вывод команды print_r($data); Код (Text): Array ( [0] => Оригинальный № [1] => Неоригинальный № [2] => Наименование [3] => Производитель [4] => Цена ) Array ( [0] => 2K0 511 413 D [1] => [2] => Втулка стабилизатора [3] => VAG [4] => 28,88 ) Array ( [0] => 321 498 625 E [1] => EVR5426 [2] => Подшипник [3] => Ruville [4] => 213,26 ) Array ( [0] => 321 615 301 D [1] => 24.0120-0128.1 [2] => Диск тормозной [3] => ATE [4] => 333,84 ) Array ( [0] => 333 513 425 [1] => FE08071 [2] => Пыльник [3] => Febi [4] => 30,47 ) Array ( [0] => 357 121 140 [1] => [2] => Заглушка [3] => VAG [4] => 38,44 ) Array ( [0] => 357 199 402 B [1] => 10188 01 [2] => Подушка [3] => Lemforder [4] => 264,61 ) Array ( [0] => 256 725 301 J [1] => [2] => Бумага [3] => Epson [4] => 256,3 )
так в чём проблема?.. вы реально получили на один массив одну строку. чтобы вывести данные, нужно сделать что-то вроде: PHP: <?php foreach ($data as $line) { foreach ($line as $cell) { echo "$cell "; } echo "<br>"; } ?>
сделал так и вот результат: Warning: Invalid argument supplied for foreach() in Z:\home\test1.ru\www\price.php on line 11 это значит что нет такой переменной или пустой массив как я понял...
всё, сделал так PHP: <?php $handle = fopen("33.csv", "r"); echo "<center><table>"; echo "<tr>"; while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { foreach($data as $value){ echo "<td>$value</td>"; } echo "<tr>"; } echo "</table></center>"; fclose($handle); ?> но всеравно хотел бы понять почему не работало по другому....
лучше поправить (правильно закрыл теги и вынес каждую строку - вам же удобнее): PHP: <?php $handle = fopen("33.csv", "r"); echo "<center><table>"; while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { echo "\r\n<tr>"; foreach($data as $value){ echo "<td>$value</td>"; } echo "</tr>"; } echo "\r\n</table></center>"; fclose($handle); ?>