Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Непонятная ошибка при выведении массива в браузере
 
 автор: krokodil   (02.08.2010 в 03:44)   письмо автору
 
 

Есть текстовый файл с меню. Первая и вторая колонка это категории, третяя - субкатегории разделенные "#". Пример:

1|Category_1|test1|
2|Category_2|test1#test2#test3|
3|Category_3|test1#test2#test3#test4|
4|Category_4|test1|
5|Category_5|test1|

При помощи скрипта (код ниже) должно бы выводить вот так:

1=Category_1
2=Category_2
3=Category_3
4=Category_4
5=Category_5

Category - Category_1 = test1

Category - Category_2 = test1
Category - Category_2 = test2
Category - Category_2 = test3

Category - Category_3 = test1
Category - Category_3 = test2
Category - Category_3 = test3
Category - Category_3 = test4

Category - Category_4 = test1

Category - Category_5 = test1

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



    $datafile="menu.txt";
    $file=file("$datafile");
    $total=count($file);

    for ($i=0; $i<$total; $i++)
    {
        $element=explode("|", $file[$i]);

        $category[$i]="$element[0]=$element[1]";

        $sub_category=explode("#", $element[2]);
        $sub_total=count($sub_category);
        
        $ii=0;
        do
        {
            $sub_list[$ii]="Category - $element[1] = $sub_category[$ii]";                
            $ii++;
        } while ($ii<$sub_total);
        
        $sub_for_this_category[$i]=implode("<br>", $sub_list);
        
    }

    $category_list=implode("<br>", $category);
    $subcategory_list=implode("<br><br>", $sub_for_this_category);

    print "<hr>$category_list<hr>$subcategory_list"; exit;


Помогие пожалуйста.

  Ответить  
 
 автор: sim5   (02.08.2010 в 04:29)   письмо автору
 
   для: krokodil   (02.08.2010 в 03:44)
 

А почему в файле, у вас доступа к базе нет?

  Ответить  
 
 автор: krokodil   (02.08.2010 в 07:07)   письмо автору
 
   для: sim5   (02.08.2010 в 04:29)
 

Важное уточнение: мне не просто их надо вывести на экран, а записать в одтельный файл для последующей работы java скрипта. Поэтому мне нужна именно такая форма скрипта.

  Ответить  
 
 автор: sim5   (02.08.2010 в 07:38)   письмо автору
 
   для: krokodil   (02.08.2010 в 07:07)
 

Вы не оответили на вопрос о базе данных. Если у вас она используется, то получать из нее данные категорий для меню и записывать в таком виде, ну это просто ужас. Да и меню, все таки должно выглядеть так:

Раздел 1
  Подраздел 1
    Документ 1.1
Раздел 2 
  Подраздел 2
    Документ 2.1
    Документ 2.2
    Документ 2.3
....
и т.д.

И это, если меню раскрыто. Вы не считаете, что ваше меню непонятное?
У вас не ошибка, а вы не верно формируете свой массив, потому у вас - как просили так и получили. Собственно и исходное, из которого вы формируте массив, крайне в неудачном представлении. Формировать меню на странице можно без участия JavaScript, им вы можете управлять меню, типа раскрывать/сворачивать разделы, то есть передавать некий массив описывающий элементы меню для JS-сценария нет необходимости, все это может делать РНР. Если же по тем или иным причинам вам нужно передать это в JS сценарий, то это не .тхт файл должен быть (хотя расширение роли не играет), а JS код, более точнее выражаясь, этот файл должен описывать JS-объект, типа:
var menu = {'cat1':[doc1],'cat2':[doc1,doc2]};
Вот тогда сценарию будет легче.

  Ответить  
 
 автор: krokodil   (02.08.2010 в 09:31)   письмо автору
 
   для: sim5   (02.08.2010 в 07:38)
 

Все таки вы меня не поняли.
Есть скерипт php с помощью которого создается меню. Записываются данные в текстовый файл который и выгладит как указано выше. При добавлении новости работает java скрипт который при выборе определенной категории подставляет нужные субкатегории. Естественно что запись будет идти в js файл и совершенно в другом виде. Суть проблемы в том, что при объеденении массива после цикла for и do вместо должного (как показано на верху) выводит так:

Category - Category_1 = test1

Category - Category_2 = test1
Category - Category_2 = test2
Category - Category_2 = test3

Category - Category_3 = test1
Category - Category_3 = test2
Category - Category_3 = test3
Category - Category_3 = test4

Category - Category_4 = test1
Category - Category_3 = test2 !
Category - Category_3 = test3 !
Category - Category_3 = test4 !

Category - Category_5 = test1
Category - Category_3 = test2 !
Category - Category_3 = test3 !
Category - Category_3 = test4 !

Строки которых не должно быть я отметил знаком "!". Почему они появляются? Почему если в категории 3 было 4 пунтка субменю, а в последующих только по одному, оно накидывает их из предыдущего.

  Ответить  
 
 автор: sim5   (02.08.2010 в 15:31)   письмо автору
 
   для: krokodil   (02.08.2010 в 09:31)
 

Вот то, чего вы не желаете видеть в своем массиве, я и без ! понимаю. Но до сих пор остается непонятным:
1. От куда беруться исходные данные для вашего меню?
2. Какую структуру имет ваше меню?
3. Если меню, это массив в основе своей (что логично при вложениях), то почему такая странная структура у файла хранящего его элементы?
4. Зачем вообще нужен этот промежуточный файл?

Есть масса "человеческих" меню с уравлением на JS, где при выборе категории раскрываются (а не подставляются) ее подкатегории. А вот добавлением новостей JavaScript не занимается, не под силам ему это, единственное, что он может, это запросить/подключить готовые данные.

Ваш список меню даже отдаленно не напоминает, потому вы уж лучше опишите словами что нужно сделать, почему, и как.

  Ответить  
 
 автор: krokodil   (02.08.2010 в 22:35)   письмо автору
 
   для: sim5   (02.08.2010 в 15:31)
 

Исходные данные беруться из $datafile="menu.txt"; в самом верху скрипта. Из него нужно составить правильный js файл для последующей работы.
Главный вопрос в том: правильно ли я объединяю данные в массив после циклов for и do? что то там не так.

  Ответить  
 
 автор: krokodil   (02.08.2010 в 23:33)   письмо автору
 
   для: krokodil   (02.08.2010 в 22:35)
 

Огромное спасибо за попытку помочь, но я уже сам разобрался!

  Ответить  
 
 автор: sim5   (03.08.2010 в 02:09)   письмо автору
 
   для: krokodil   (02.08.2010 в 22:35)
 

Нет не правильно. У вас даже текстовый файл исходный имеет лишнее, что будет приводить к появлению пустных элементов массива. А вообще, это бардак полный.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования