Эта тема на forum.dklab.ru


Кирилл Моисеенков: Перекомпоновка ини-конфига.
Есть ini-файл. Примерно такого содержания:

...
[colors]
;a="b";
b="c";
[templates]
short::big::red="./files/1.htm";
short::small::red="./files/1.htm";
long::big::blue="./files/1.htm";
...

Так вот я его скармливаю parse_ini_file (true).
$mc=parse_ini_file("./inc/config.ini",true);
Мне надо, чтобы можно было вызвать шаблон $mc, например проинклудить. Подскажите, что надо изменить в кострукции ини-файла, чтобы полученный из его массив стал, например пятиразмерным? Или После парса изменить значение $mc на вложенный массив, т. е. всё на тот же $mc регулярным выражением?

Спасибо.

П. С. В продолжение хочу добавить, что следует создать раздел по регулярным выражениям.
Ant:
Подскажите, что надо изменить в кострукции ини-файла, чтобы полученный из его массив стал, например пятиразмерным?
Исходя из документации, никак. Скорее всего, сам подход можно изменить. Опишите саму задачу более подробно.

П. С. В продолжение хочу добавить, что следует создать раздел по регулярным выражениям.
Рано ещё. Их не так много.
Дмитрий Котеров:

$result = array();
foreach ($mc as $catname=>$catcont) {
$result[$catname] = array();
foreach ($catcont as $k=>$v) {
$parts = explode("::", $k);
$a =& $result[$catname];
foreach ($parts as $p) {
$a[$p] = array();
$a =& $a[$p];
}
$a = $v;
}
}

Кирилл Моисеенков:
Дмитрий Котеров:
Спасибо. Вариант со ссылками мне понравился, но ИМХО, это всё ещё надо запихнуть в $mc... Ну да это просто.

Я бы и сам это написал, но вот если есть несколько разных шаблонов, например long::blue, short::repeat::big::blue::items, unity, regs::unity и т. п., то рекурсией на проверку, массив ли мы собираемся разбивать или строку :)?
Ant:
Я имею ввиду, чтобы пользователи спрашивали, типа мне надо регексп чтобы заменять "mihey_ka{1}" на "miheyka #1".
Короче - сплошной вопрос-ответ.
Дмитрий Котеров:
Формулируйте мысли яснее, разбираться в мешанине слов нет никакого желания.
Rumata:
такие вещи

long::big::blue

можно распарсить с помощью

explode

а там можно и циклом пробежаться
Кирилл Моисеенков:
Rumata:
Какой Вы умный! Надо бы Вам за это карму поднять :).
Хотя именно Вашу идею я попытаюсь реализовать наиболее экономным способом.
Дмитрий Котеров:
Объясняю задачу.
Есть конфиг новостного скрипта

[dir]
path=".";
inc="inc";
news="news";
art="art";
templates="templates";
uploads="uploads";
images="images";
smillies="smillies";
language="lang";
skins="skins";
[file]
articles="art.dat";
news="news.dat";
users="users.dat";
functions="functions.php";
categories="categories.dat";
sections="sections.dat";
smillies="smillies.dat";
language="lang.php";
banlist="banlist.dat";
badwords="badwords.dat";
temp_ext="php";
[lang]
now="ru";
[template]
now="basic";
[templates]
aS_content_base="./inc/templates/sconbase.htm";
[news]
short_to_page="3";
head_to_page="5";
pages="5";
bbcode="yes";
html="yes";
smillies="yes";
upimages="yes";
reverse="no";
[art]
short_to_page="3";
head_to_page="5";
prev="3";
next="5";
;popup_view_comment_link="no";
;popup_form_comment_link="no";
;popup_view_rate_link="no";
;popup_form_rate_link="no";
;popup_view_full_link="no";
;popup_view_archive_link="no";
;popup_view_print_link="no";
;popup_view_stat_link="no";
;popup_form_send_link="no";
;popup_view_comment_string="no";
;popup_form_comment_string="no";
;popup_view_rate_string="no";
;popup_form_rate_string="no";
;popup_view_full_string="no";
;popup_view_archive_string="no";
;popup_view_print_string="no";
;popup_view_stat_string="no";
;popup_form_send_string="no";
reverse="no";
bbcode="yes";
html="no";
smillies="yes";
upimages="yes";
[error]
a="b";
[url]
site="http://soap.ru";
script_url="http://soap.ru/news/soap";
script_path="/home/soap.ru/www/news/soap";
view_news="http://soap.ru/news/soap/news.php?action=show&mode=short";
[addon]
a="b";
[aploads]
extentions="jpg, gif, png, jpeg";
max_size="1000000";
[smillies]
extentions="gif, png";
max_size="1000000";
[banlist]
a="b";
[comment]
bbcode="no";
html="";
smillies="";
[vars]
default_flood="10";
[skins]
a="b";

Далее parse_ini_file("config.ini", true);
В скрипте используется несколько шаблонов из разделов aS, aH и aF. В каждом разделе есть разные подразделы: content, repeat, print, base, header, footer, top, copyright, error...
Шаблоны, следовательно, должны получаться такие: $soap['templates']['aS']['header'] для "хедера короткого артикля" (). Получается, что в конфиге надо каким-то образом создать многомерный вложенный массив неизвестной мерности (двух-, трёх-, одно-, десятимерный). Как сказал мне Ant, этого сделать нельзя. Значит, только explode'ом и foreach'ем.

На самом деле ничего сложного нет. Просто очень хочется услышать профессионально правильное решение, а не детскую забаву.
Дмитрий Котеров:
Я что, впустую выше код написал, что ли?
Хорошо, тогда больше не буду.
Кирилл Моисеенков:
Дмитрий Котеров:
У вас там три foreach'а -- это для , например. А если у нас не трёхмерный массив с путём к шаблону, а пятимерный -- ? Я и говорил, что надо рекурсивно вызывать функцию с одним foreach'ем, но проверять, если у нас в $catcont массив, то вызываем ещё раз, если нет, то записывем в $mc.

ВопросЯ что, впустую выше код написал, что ли?
ОтветФормулируйте мысли яснее, разбираться в мешанине слов нет никакого желания.
Сами же просили.
Rumata:
Хотя именно Вашу идею
я же указал путь...
циклом

дерзайте
Кирилл Моисеенков:
Rumata:
Я Вас панинемаю.
Кирилл Моисеенков:

foreach ($alert['templates'] as $key => $value){
$temp = array();
$temp = explode("_", $key);
for ($i = 0; $i < count($temp); $i++){
if ($i != count($temp)-1){
*
} else {
**
}
}
}

* - Ребят, подскажите, как дальше!
Дмитрий Котеров:

У вас там три foreach'а -- это для , например. А если у нас не трёхмерный массив с путём к шаблону, а пятимерный -- ?
А теперь еще раз смотрим код и думаем головой, а не чем обычно.
Дмитрий Котеров:
Тема закрыта.

Эта тема на forum.dklab.ru