[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сложный массив
jasperio
Здравствуйте уважаемые программисты!
Помогите или подскажите пожалуйста как правильно и эффективней решить задачу.

Есть некий текстовый файл содержащий в себе несколько тысяч строк наименований, позиций и цен о числящем товаре на складе. Структура очень проста :

<price.txt>

A Материнская плата
AM2
AM2 MB ASUS M2A74-AM SE mATX 56,10
AM2 MB ASUS M2N sAM2 63,80
AM3
AM3 MB ASUS M4A78 ATX 68,75
AM3 MB ASUS M4A78 PRO ATX 96,80
B CPU
775 Процессор Core 2 Duo E2160 S775 tray 59,95
775 Процессор Core 2 Duo E2180 S775 tray 61,60
AM2
AM2 Процессор AMD Athlon 3800+ X2 AM2 tray 41,80
AM2 Процессор AMD Athlon 4000+ AM2 tray 38,50
E SVGA
PCI-Express
PCI-Express Видеокарта ATI Radeon HD3730 Sapphire 512MB 39,60
PCI-Express Видеокарта ATI Radeon HD3750 Sapphire 1024MB 66,00
...


Чтобы постоянно не обращатся к серверу за файлом, я решил занести всю информацию в массив (файл занимает 158,630 кб)

Я читаю файл от начала до конца и записываю в массив категорию (Материнская плата, CPU, SVGA) после чего, все это я вывожу в тэг <SELECT><OPTION> и т.д. Таким образом человек может просто выбрать нужную себе категорию и скрипт должен предоставить дальнейшую информацию по запрашиваемой категории (Двигаясь по позициям массива заполнившего когда-то из файла).

Но к сожалению мой опыт заканчивается на создании такого массива, я не знаю как правильно создать массив имеющий подкатегории в категориях и несколько сотен позиций в подкатегориях. Как можно создать такой массив во время создания файла, а потом использовать его ? Да и стоит ли это делать через массивы ?

Я использую PHP и JavaScript.

Вот код :

<?php

$cssUrl = "css/style.css";
$list_RU = Array("A Материнская плата" => "Материнськая плата",
"B CPU" => "Процессор",
"C Cooler" => "Охлаждение(Cooler)",
"D RAM" => "Оперативная память",
"E SVGA" => "Видеокарта",
"F Мультимедиа" => "Мультимедиа",
"G Сетевое оборудование" => "Сетевое обладнання",
"H FDD" => "Дисковод",
"I CD-ROM" => "Привод",
"J Кабеля" => "Кабель",
"K HDD" => "Винчестер",
"L Модемы" => "Модем",
"M Корпуса" => "Корпус",
"N Клавиатуры" => "Клавиатура",
"O Мыши" => "Мышка",
"P Ковры" => "Ковры",
"Q Колонки" => "Колонки",
"R Сетевые фильтры" => "Сетевые фильтры",
"R1 Мониторы" => "Монитор",
"X1 LCD Телевизоры" => "Телевизор",
"T Принтеры" => "Принтер",
"U Сканера" => "Сканер",
"V UPS" => "Блок беcперебойного питания",
"X Разное" => "Разное");

$item = 0;
$step = 0;

$tbl_1 = "<p><table border=1><tr><td width=\'30\' align=\'center\'>№</td>".
"<td width=\'800\' align=\'center\'>Перечень наименований</td>".
"<td width=\'60\' align=\'center\'>цена</td></tr>";
$tbl_3 = "</table></p>";

?>

<html>
<
head>
<
title>компания Bенeць © Сборка конфигурации компьютера</title>
<
LINK href="<?=$cssUrl?>" rel="stylesheet" type="text/css">
</
head>
<
body onLoad="draw_list();">

<
div align="center">
<
p> </p>

<
table cellpadding="0" celspacing="0" align="center">
<
tr><td align="center">
<
font style="font-family:Verdana; font-size:14px;font-weight:bold;">Компьютер за 5 минут :</font><br><br>

<
div id="ZAKAZ" name="ZAKAZ"></div>
1. <select id="pos" name="pos" onChange="draw_list();">

<?php

$cnt=0;
$f = fopen ("price.txt", "rt") or die ("Error !");
while (!feof($f))
{
$st = fgets ($f);

// сначала я ищу в файле строки с табуляцией "\x09" это категория
if ($st[0]=="\x09")
{

$nst = trim ($st);
$tmp=$list_RU[$nst];
if ($tmp != "") echo "<option>".$tmp."</option>";
$item++;

} else {
// Обрабатываем остальные данные
$cnt++;
}
}

fclose ($f);

?>
</select>
<
br><br>
<
div id="LIST" name="LIST"></div>
</
td></tr></table></div>
</
body></html>

<
script type="text/javascript">
<!--

function draw_list ()
{
var objLst = document.getElementById('ZAKAZ');
var objPos = document.getElementById('pos');
objLst.innerHTML = '<?=$tbl_1?><tr><td>1.</td><td bgcolor=\'#A05070\'>'+objPos.selectedIndex+'</td><td>123.50</td></tr><?=$tbl_3?>';
}//-->
</SCRIPT>




Спустя 13 минут, 25 секунд (14.12.2009 - 08:40) VolCh написал(а):
Загонять в один массив для вывода HTML файл размером в сотни килобай, по-моему, не лучшая идея. Я бы сделал примерно так:
- Файл (он, насколько я понимаю, обновляется редко) парсится только один раз и или записывается в БД, или разносится по категориям и подкатегориям по кучке файлов. Кстати, а в другой форме файл нельзя получить, например в CSV? так намного проще парсить
- Категории выводятся в HTML статически, а вот их элементы дергаются с сервера динамически (аякс или что-то вроде этого, можно просто автоматическую перезагруку страницы целиком)

Спустя 1 день, 38 минут, 59 секунд (15.12.2009 - 09:19) jasperio написал(а):
Цитата (VolCh @ 14.12.2009 - 05:40)
- Файл (он, насколько я понимаю, обновляется редко)

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

Цитата (VolCh @ 14.12.2009 - 05:40)
или разносится по категориям и подкатегориям по кучке файлов.

Может быть я ошибаюсь, но мне кажется что это не удобный для меня вариант, мне проще парсить один файл, где уже записано н-ное количество категорий, чем искать неизвестно сколько файлов... Я ведь не знаю когда в базе появится пару новых категорий, которые немного изменят структуру. Это значит добавятся пара файлов ?! Придется переписывать скрипт и добавлять пару этих файлов. А так я могу прогуляться по файлу и собрать все категории и под категории что есть в файле.

Цитата (VolCh @ 14.12.2009 - 05:40)
аякс или что-то вроде

Про Аякс слыхал, но не знаю что это вообще, что ж буду гуглить.
Спасибо и на этом. Жду новых советов.

smile.gif

Спустя 1 день, 20 часов, 3 минуты, 35 секунд (17.12.2009 - 05:23) NewBePhp написал(а):
jasperio

массивчик хорош... тока че то ключики в нем ну уж весьма великоваты... а ajax это концепция javascript... вещь полезная, но на мой взгляд копризная...
если не волнует такая тема как мигание страницы при обновлении то я думаю ломать себе голову и мучать гугл не стоит... попробуй писать на пхп ... оригинальнее и так далее... а уж потом на аяксину переходи... точнее подключай ее к серверным скриптам... но тут ты сталкнешься с (а)синхронностью передачи данных...

Спустя 1 час, 54 минуты, 42 секунды (17.12.2009 - 07:17) qpayct написал(а):
Многомерные массивы тебе в помощь.
НО! На мой взгляд, если файл с которого строим страницу меняется ежедневно, надо ежедневно парсить из него бд(проверки на предмет совпадения и устарения).
Естесственно не советую подгружать весь файл в массивы при каждой загрузке страницы. Этож нецелесообра3дно :-D

Спустя 1 час, 42 минуты, 13 секунд (17.12.2009 - 09:00) sergeiss написал(а):
Цитата (jasperio @ 15.12.2009 - 10:19)
Ну в принципе новый товар приходит на склад один раз в неделю, а тем временем идет распродажа старого товара, поэтому файл обновляется один раз в день.

А почему бы тогда не использовать БД? Тогда любые прибытия-убытия товара будут мгновенно доступны. Иначе, если ты будешь обновлять его раз в день, то ты можешь попытаться продать один и тот же товар 2-3 раза. Покупатели вряд ли будут довольны.

PS. Если боишься БД - поверь, это не сложнее, чем работа с файлами. То есть - очень просто.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.