За последние 24 часа нас посетил 32991 программист и 1821 робот. Сейчас ищут 882 программиста ...

Создание коллекции массивов - прошу помощь гуру

Тема в разделе "Прочие вопросы по PHP", создана пользователем quazare, 17 дек 2008.

  1. quazare

    quazare Активный пользователь

    С нами с:
    3 июн 2008
    Сообщения:
    88
    Симпатии:
    0
    Адрес:
    Nsk
    Народ приветствую. Есть небольшая логическая задачка - уже "сломал" голову. Прошу помощи. Задача в следующем:

    Общий смысл - отображение только тех подразделов меню, где есть элементы.

    Схема:


    РАЗДЕЛ 1
    -подраздел 1
    -подраздел 2
    РАЗДЕЛ 2
    -подраздел 1
    -подраздел 2
    -подраздел 3

    Количество Разделов и подразделов задается в 2-х файлах, пользователь просто вводит их через запятую:

    файл 1

    РАЗДЕЛ 1, РАЗДЕЛ 2, .....

    файл 2

    подраздел 1, подраздел 2, подраздел 3.....

    Соответственно как сделать выборочное отображение подразделов в РАЗДЕЛЕ, при условии, если в подразделе есть загруженные элементы?

    Предполагаю делать это динамически создавая на каждый РАЗДЕЛ собственный массив, а туда "запихивать", подразделы элементов, которые соответствуют этому РАЗДЕЛУ.

    Как реализовать динамическое создание массивов на пхп?? Большое спасибо!
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    зачем такие сложности-то? мыне ищем легких путей?

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

    100% даю есть более легкое красивое решение.
     
  3. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    РАЗДЕЛ 1
    -подраздел 1.1
    -подраздел 1.2
    РАЗДЕЛ 2
    -подраздел 2.1
    -подраздел 2.2
    -подраздел 2.3
    вообще это древовидная структура....
    explode для парсинга...
    но я не вполне понял=) мне кажется подход не совсем верный=)
     
  4. quazare

    quazare Активный пользователь

    С нами с:
    3 июн 2008
    Сообщения:
    88
    Симпатии:
    0
    Адрес:
    Nsk
    абсолютно согласен - подход не совсем понятный и возможно неверный, сложности только из-за того - что ВСЯ база сайта - это текстовые файлики...
    2 настроечных файла - отображаются через комбо (раздел и подраздел) - соответственно таким образом "разбрасывается" товар ...

    изначально должно быть создание массивов на основе существующих товаров (эмммм... динамически создаем массив на первый РАЗДЕЛ, перебираем базу.... - добавляем все подразделы соответствующие этому разделу) и т.д...
    проблемы - просто не могу понять как создать n-динамических массивов (для раздела)....
     
  5. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    я не совсем понимаю как ты собираешься понимать какой подраздел к какому разделу относится.
    я бы предложил сделать так(то же через одно место, но если есть ограничения...):
    файл с разделами. файл с подразделами, родители определяються переносом строки.
    читая файл каждую строку переносим в свою переменную(элемент массива). Затем пробегаемся по ним explode(",", $str);
    хотя встают ещё куча вопросов...
     
  6. quazare

    quazare Активный пользователь

    С нами с:
    3 июн 2008
    Сообщения:
    88
    Симпатии:
    0
    Адрес:
    Nsk
    хорошо, привожу код как это реализовано

    PHP:
    1. if ($kolvo_meb[$tovals_meb]=="Мебель для прихожей"){
    2.      $exists = in_array($razdel_meb[$tovars_meb], $homeinterier);
    3.     if ($exists!=TRUE){
    4.        array_push($homeinterier, $razdel_meb[$tovars_meb]);
    5.     }
    6. }

    $homeinterier - это массив раздела "Мебель для прихожей".

    В кратце алгорим такой.

    1.Создаем на каждый раздел свой массив! (собственно в этом и загвоздка... как создать динамически, если разделов куча).
    2.Перебираем все файлики товаров и "выкусываем" те, в которых прописан этот "раздел", смотрим на "подраздел" в и делаем array_push в $homeinterier ...

    Собственно так создается меню...

    а функция explode() - применялась ранее, для того что-бы "разрезать" текстовый файлы по "запятой".
     
  7. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    жуть какая-то, а не создание дерева.
    массив на раздел:
    PHP:
    1.  
    2. $array_parent=explode(",", "Раздел 1, Раздел 2, Раздел 3");
    3. FOREACH ($array_parent as $key=>$vlue){
    4.  $name='parent'.$key;//или как там душе угодно
    5.  $$name=array('name'=>$value);
    6. }
    7.  
    вот наверное как-то так=)) а вообще задачу лучше оформлять абстрагировано. т.е. именно ту часть которая не получается=) или появляется желание изменить вообще всё=) хотя парой лучше поступить именно так...
     
  8. quazare

    quazare Активный пользователь

    С нами с:
    3 июн 2008
    Сообщения:
    88
    Симпатии:
    0
    Адрес:
    Nsk
    За код спасибо.
    А как добавить элемент в такой созданный массив (т.е. имеется ввиду не $parent1[0]="AAA")
     
  9. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    а зачем текстовые файлы? Почему бы сразу не писать в массив?
     
  10. quazare

    quazare Активный пользователь

    С нами с:
    3 июн 2008
    Сообщения:
    88
    Симпатии:
    0
    Адрес:
    Nsk
    хм... предложи вариант решения плиз... хотябы общий принцип
     
  11. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    РАЗДЕЛ 1
    -подраздел 1
    -подраздел 2
    РАЗДЕЛ 2
    -подраздел 1
    -подраздел 2
    -подраздел 3

    PHP:
    1. <?php
    2. $menu = array(
    3.     0 => array(
    4.         'РАЗДЕЛ 1',
    5.         array(
    6.             'подраздел 1',
    7.             'подраздел 2',
    8.         )
    9.     ),
    10.     1 => array(
    11.         'РАЗДЕЛ 2',
    12.         array(
    13.             'подраздел 1',
    14.             'подраздел 2',
    15.             'подраздел 3'
    16.         )
    17.     ),
    18. );
    19.  
    20. ?>
    больше ниче не могу сказать, т.к. непонятно КАКУЮ ЗАДАЧУ ты ставишь, кроме как фразы которая постоянно лидирует среди других - динамические массивы.... ЗАЧЕМ ОНИ??? Опиши задачу, что и как у тебя хранится в этом меню, какой функционал должен быть реализован и проч.
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    во, альтернатива Serialize
    PHP:
    1.  
    2. <?
    3. function FormArray($arr) {
    4.       $res=array();
    5.       if(empty($arr))
    6.          return "array()";
    7.          foreach($arr as $key=>$val) {
    8.              if(!is_array($val)){
    9.                 $res[]="\"$key\"=>\"$val\"";
    10.              } else {
    11.                 $res=array_merge($res,array(FormArray($val)));
    12.              }
    13.          }
    14.       return "array(".implode(",",$res).")";
    15.  }
    16. ?>
     
  13. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  14. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    кстати, да )))
    я тож для записи в файл юзаю var_export
     
  15. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ничё вы не понимаете, ручная работа всегда дороже =))
     
  16. quazare

    quazare Активный пользователь

    С нами с:
    3 июн 2008
    Сообщения:
    88
    Симпатии:
    0
    Адрес:
    Nsk
    вообщем, все было обдумано и переделано на JScripte... вроде все проканало...