ФорумПрограммированиеPHP для идиотов → файл в массив

файл в массив

  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 5 июня 2008 г. 8:46

    Подскажите, как из такого файла (структура блоков и их название может быть каким угодно (это не XML)):
    <main>
    <id>ИДЕНТИФИКАТОР</id>
    <name>ИМЯ</name>
    <icq>
    UIN
    <file>
    FILE
    </file>
    </icq>
    </main>


    Получить такой массив, в котором хранились бы значения блоков, например:
    $aArray['main']['icq'] == UIN
    $aArray['main']['icq']['file'] == FILE
    и т.д.


  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 5 июня 2008 г. 8:53, спустя 6 минут 25 секунд

    А почему это не XML?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 5 июня 2008 г. 9:02, спустя 9 минут 1 секунду

    Ну потому что блок может быть такого вида: [test][/test], в этом файле не может быть таких конструкций [test xxx="sdss"][/test], два одинаковых тега на одном уровне (братья) должны вызывать ошибку))
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 5 июня 2008 г. 9:08, спустя 5 минут 57 секунд

    AlexB, я знаю, ты можеш мне помочь))
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 5 июня 2008 г. 10:19, спустя 1 час 11 минут 16 секунд

    Lirck, как начсет регулярных выражений ?
    или например конечных (если я правильно помню) автоматов?!
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 5 июня 2008 г. 10:23, спустя 4 минуты 23 секунды

    Да с помощью регулярок сдесь все и решается, но как сделать структуру массива древовидной, то есть чтобы небыло доступ напрямую к элементу если он вложен в другой элемент, а только через элемент в который вложен элемент был доступ к вложенному элементу :))))
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 5 июня 2008 г. 10:42, спустя 19 минут 7 секунд

    Тут невозможно ответить односложно. Надо писать разборщик. Потребуются регулярки и рекурсия (собственно для вложенности). Находишь содержимое родительского блока и скармливаешь рекурсивной функции. И так до упора. Написание и отладка полюбому займет время и попортит нервы. :)

    Но мне все-таки непонятно откуда берутся задачи, в которых предлагается изобретать велосипед? Зачем нужны нестандартные блоки, если существует унифицированный стандарт XML?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 июня 2008 г. 10:53, спустя 10 минут 28 секунд

    AlexB, ага, шаблонное мышление придет с опытом. Это не означает что надо оперировать только шаблонами. Опыт по сути и есть шаблон.
    adw/0
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 5 июня 2008 г. 11:24, спустя 30 минут 52 секунды

    adw0rd, если задача учебная, то да. Но если это реальный проект, с реальными сроками, то что-то не то в консерватории. :)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 июня 2008 г. 14:15, спустя 2 часа 51 минуту 19 секунд

    AlexB, я к тому что не надо изобретать велосипедов.
    adw/0
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 5 июня 2008 г. 23:33, спустя 9 часов 17 минут 49 секунд

    Аааааааааааа … значит я не совсем уловил мысль :)
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 6 июня 2008 г. 2:46, спустя 3 часа 13 минут 3 секунды

    Ну вроде понял ))
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 6 июня 2008 г. 6:05, спустя 3 часа 18 минут 38 секунд

    Хех, а что если заменить все [] (или прочие ограничители) на <> соответственно, а потом парсить как XML? :-P
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 6 июня 2008 г. 6:12, спустя 7 минут 2 секунды

    Нет, я лучше буду изобретать велосипед.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 6 июня 2008 г. 6:16, спустя 4 минуты 1 секунду

    удачи!

    тока если хочешь чтоб ехал сделай круглые колеса, это провереное решиение

    ЗЫ конечные автоматы тебе помогут

Пожалуйста, авторизуйтесь, чтобы написать комментарий!