|
 1.4 Кб |
|
| Есть конфигурационный файл (прикреплен к теме). Нужно его обработать и преобразовать в массив такого вида:
Array
(
[path] => Array
(
[plugins] => plugins
[cache] => cache
[comments] => comments
)
[cache] => Array
(
[enable] => 1
[expiration] => 86400
)
[distribute] => Array
(
[http://autoselect] => auto
)
[validation] => Array
(
[valid_chars] => abcdefghijklmnopqrstuvwxyz-01234567890
[valid_first_char] => abcdefghijklmnopqrstuvwxyz012345678 90
[min_chars] => 1
[max_chars] => 63
[name_like] =>
[answer_like] =>
)
[comments] => Array
(
[string_like] => Array
(
[0] => /^%/
[1] => /^;/
)
[text_eq_file] =>
)
[analyse] => Array
(
[free_like] => Array
(
[0] => /domain is free/im
)
[ordered_like] => Array
(
[0] => /domain is registered/im
)
[expiration_rules] => Array
(
[abc] => [\t\n\r ]+\n[\t\n\r ]+
[def] => [\t\n\r ]+\n[\t\n\r ]+
[5] => [\t\n\r ]+\n[\t\n\r ]+
[6] => [\t\n\r ]+\n[\t\n\r ]+
[7] => [\t\n\r ]+\n[\t\n\r ]+
)
)
)
|
Вот что у меня получилось:
<?php
// Переносим данные из файла в массив
$mass1 = file("test.conf");
// Создаем новый массив (mass2) без пустых значение и комментариев
foreach ($mass1 as $index => $val)
{
if ($val[0] !== ";" and trim($val) !== "")
$mass2[] = $val;
}
// Обходим массив и создаем 2 массив (mass3)
for($i=0; $i < count ($mass2); $i++)
{
$element = $mass2[$i];
if($element[0] == "[")
$temp = substr($element, 1, strlen($element)-4);
else
{
$ex_element = explode(" = ", $element);
$mass3[$temp][$ex_element[0]] = $ex_element[1];
}
}
// Выводим полученный массив
print_r($mass3);
?>
|
Помогите мне доработать скрипт, чтобы он работал "Правильно". Заранее большое спасибо!
P.S. Функцию Parse_ini_file не предлагать! | |
|
|
|
|
|
|
|
для: maksi_77
(18.08.2011 в 02:05)
| | В чем заключается "неправильность" работы существующего скрипта (куда копать)? | |
|
|
|
|
|
|
|
для: cheops
(18.08.2011 в 10:46)
| | Вот какой массив он создает:
Array
(
[path] => Array
(
[plugins] => plugins
[cache] => cache
[comments] => comments
)
[cache] => Array
(
[enable] => yes
[expiration] => 86400
)
[distribute] => Array
(
[http://autoselect] => auto
)
[validation] => Array
(
[valid_chars] => "abcdefghijklmnopqrstuvwxyz-0123456789"
[valid_first_char] => "abcdefghijklmnopqrstuvwxyz012345678 9"
[min_chars] => 1
[max_chars] => 63
[name_like] =>
[answer_like] =>
)
[comments] => Array
(
[string_like [] ] => "/^%/"
[string_like[]] => "/^;/"
[text_eq_file] =>
)
[analyse] => Array
(
[free_like[]] => "/domain is free/im"
[ordered_like[]] => "/domain is
[expiration_rules[abc]] => "[\t\n\r ]+\n[\t\n\r ]+"
[expiration_rules[def]] => "[\t\n\r ]+\n[\t\n\r ]+"
[expiration_rules[5]] => "[\t\n\r ]+\n[\t\n\r ]+"
[expiration_rules[]] => "[\t\n\r ]+\n[\t\n\r ]+" )
)
|
а нужен такой
Array
(
[path] => Array
(
[plugins] => plugins
[cache] => cache
[comments] => comments
)
[cache] => Array
(
[enable] => 1
[expiration] => 86400
)
[distribute] => Array
(
[http://autoselect] => auto
)
[validation] => Array
(
[valid_chars] => abcdefghijklmnopqrstuvwxyz-01234567890
[valid_first_char] => abcdefghijklmnopqrstuvwxyz012345678 90
[min_chars] => 1
[max_chars] => 63
[name_like] =>
[answer_like] =>
)
[comments] => Array
(
[string_like] => Array
(
[0] => /^%/
[1] => /^;/
)
[text_eq_file] =>
)
[analyse] => Array
(
[free_like] => Array
(
[0] => /domain is free/im
)
[ordered_like] => Array
(
[0] => /domain is registered/im
)
[expiration_rules] => Array
(
[abc] => [\t\n\r ]+\n[\t\n\r ]+
[def] => [\t\n\r ]+\n[\t\n\r ]+
[5] => [\t\n\r ]+\n[\t\n\r ]+
[6] => [\t\n\r ]+\n[\t\n\r ]+
[7] => [\t\n\r ]+\n[\t\n\r ]+
)
)
)
|
| |
|
|
|
|
|
|
|
для: maksi_77
(18.08.2011 в 02:05)
| | Можно начать отталкиваться от следующего решения
<?php
// Переносим данные из файла в массив
$mass1 = file("test.conf");
// Создаем новый массив (mass2) без пустых значение и комментариев
foreach ($mass1 as $index => $val)
{
if ($val[0] !== ";" and trim($val) !== "")
$mass2[] = $val;
}
// Обходим массив и создаем 2 массив (mass3)
$section = "|^\[(.*?)\]$|";
$pattern = "|\[(.*?)\]|";
$temp = "";
for($i=0; $i < count ($mass2); $i++)
{
$element = trim($mass2[$i]);
if(preg_match($section, $element, $sec))
{
// Имеем дело с секцией [xxx]
$temp = $sec[1];
}
else
{
// Ключ-значение
list($key, $value) = explode("=", $element);
// Избавляемся от ведущих и конечных пробелов
$key = trim($key);
$value = trim($value);
// Многомерный массив
if(preg_match($pattern, $key, $out))
{
// Удаляем из ключа последовательность вида [xxx]
$key = trim(preg_replace($pattern, "", $key));
// Имеется ассоциативный ключ
if(!empty($out[1])) $mass3[$temp][$key][$out[1]] = $value;
// Назначить индексный ключ
else $mass3[$temp][$key][] = $value;
}
// Значение как есть
else
{
$mass3[$temp][$key] = $value;
}
}
}
// Выводим полученный массив
echo "<pre>";
print_r($mass3);
echo "</pre>";
?>
|
| |
|
|
|