За последние 24 часа нас посетили 60264 программиста и 1810 роботов. Сейчас ищут 1674 программиста ...

Вопро по спискам

Тема в разделе "PHP для новичков", создана пользователем xenoll, 22 сен 2011.

  1. xenoll

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

    С нами с:
    12 янв 2010
    Сообщения:
    5
    Симпатии:
    0
    Доброго вечера уважаемые форумчане.

    Есть у меня список товаров такого вида:
    категория;подкатегория;наименование;цена;размер;

    Все это добро нужно привести к такому формату:

    категория;
    подкатетегория;
    наименование;цена;размер;
    наименование;цена;размер;
    категория;
    подкатетегория;
    наименование;цена;размер;
    наименование;цена;размер;
    ит.д.

    Буду раз помощи. Заранее благодарен!
    P.S. Весь список прогоняется циклом, все элементы строки имеюстя в массиве.
     
  2. caballero

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

    С нами с:
    23 сен 2011
    Сообщения:
    18
    Симпатии:
    0
    три вложенных цикла и все дела
     
  3. xenoll

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

    С нами с:
    12 янв 2010
    Сообщения:
    5
    Симпатии:
    0
    т.е. смотреть совпадает ли последующий элемент с текущим, а вот как между этими не совпадающими строками вставить еще одну строку массива, я не представляю...
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если уровень вложенности подкатегорий не больше 1, то да, вполне можно обойтись простым вложенным циклом. Например, так:
    PHP:
    1. <?php
    2. // Название файла, в котором лежит список
    3. $filename = 'data.txt';
    4.  
    5. $path = dirname(__FILE__);
    6. $file = $path . DIRECTORY_SEPARATOR . $filename;
    7. $csv = fopen($file, 'r');
    8. $data = array();
    9. while($row = fgetcsv($csv, 0, ';')) {
    10.     if(!array_key_exists($row[0], $data))
    11.         $data[$row[0]] = array();
    12.     if(!array_key_exists($row[1], $data[$row[0]]))
    13.         $data[$row[0]][$row[1]] = array();
    14.     $data[$row[0]][$row[1]][] = array($row[2], $row[3], $row[4]);
    15. }
    16. ksort($data);
    17. $out = '';
    18. foreach($data as $category => $catContent) {
    19.     $out .= $category . '<br />';
    20.     ksort($catContent);
    21.     foreach($catContent as $subcategory => $subcatContent) {
    22.         $out .= ' --- ' . $subcategory . '<br />';
    23.         foreach($subcatContent as $content)
    24.             $out .= ' ------- ' . implode(';', $content) . '<br />';
    25.     }
    26. }
    27. echo($out);
    28. ?>
    Пример содержимого файла data.txt
    Код (Text):
    1. Категория 2;Подкатегория 2.3;Товар 1;259 руб.;XXL
    2. Категория 2;Подкатегория 2.1;Товар 2;79 руб.;L
    3. Категория 2;Подкатегория 2.3;Товар 2;79 руб.;L
    4. Категория 1;Подкатегория 1.2;Товар 1;259 руб.;XXL
    5. Категория 1;Подкатегория 1.2;Товар 2;79 руб.;L
    6. Категория 1;Подкатегория 1.2;Товар 3;899 руб.;XL
    7. Категория 1;Подкатегория 1.1;Товар 1;259 руб.;XXL
    8. Категория 1;Подкатегория 1.1;Товар 2;79 руб.;L
    9. Категория 1;Подкатегория 1.4;Товар 2;79 руб.;L
    10. Категория 1;Подкатегория 1.4;Товар 3;899 руб.;XL
    11. Категория 1;Подкатегория 1.4;Товар 4;39 руб.;XXX
    12. Категория 1;Подкатегория 1.1;Товар 3;899 руб.;XL
    13. Категория 1;Подкатегория 1.1;Товар 4;39 руб.;XXX
    14. Категория 1;Подкатегория 1.3;Товар 4;39 руб.;XXX
    15. Категория 1;Подкатегория 1.3;Товар 1;259 руб.;XXL
    16. Категория 1;Подкатегория 1.4;Товар 1;259 руб.;XXL
    17. Категория 1;Подкатегория 1.4;Товар 2;79 руб.;L
    18. Категория 2;Подкатегория 2.3;Товар 3;899 руб.;XL
    19. Категория 2;Подкатегория 2.3;Товар 4;39 руб.;XXX
    20. Категория 2;Подкатегория 2.1;Товар 3;899 руб.;XL
    21. Категория 2;Подкатегория 2.1;Товар 4;39 руб.;XXX
    22. Категория 2;Подкатегория 2.1;Товар 3;899 руб.;XL
    23. Категория 2;Подкатегория 2.1;Товар 4;39 руб.;XXX
    24. Категория 2;Подкатегория 2.1;Товар 1;259 руб.;XXL
    25. Категория 2;Подкатегория 2.2;Товар 1;259 руб.;XXL
    26. Категория 2;Подкатегория 2.2;Товар 2;79 руб.;L
    27. Категория 2;Подкатегория 2.3;Товар 3;899 руб.;XL
    28. Категория 2;Подкатегория 2.3;Товар 4;39 руб.;XXX
     
  5. xenoll

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

    С нами с:
    12 янв 2010
    Сообщения:
    5
    Симпатии:
    0
    Огромное спасибо, все работает, осталось только разобраться - как.