Я пытаюсь создать массив, содержащий файл конфигурации, но у меня возникают проблемы, когда некоторые ключи имеют одинаковые имена. Допустим, у меня есть конфиг в таком формате:
dinner=salad
dish.fruit.first.name=apple
dish.fruit.first.juicy=true
dish.fruit.second.name=lettuce
dish.fruit.second.juicy=false
dressing.name=french
dressing.tasty=true
и это будет преобразовано в массив, подобный этому, с мыслью, что может быть любое количество значений разделенных запятыми ключей:
Array
(
[dinner] => "salad"
[dish] => Array
(
[fruit] => Array
(
[first] => Array
(
[name] => "apple"
[juicy] => "true"
)
[second] => Array
(
[name] => "lettuce"
[juicy] => "false"
)
)
)
[dressing] => Array
(
[name] => "french"
[tasty] => "true"
)
)
Но я не могу обдумать это. Я попытался создать цикл foreach и вставить новый массив в последний массив по ссылкам, но он берет только первый набор ключей, начинающийся с того же имени. Вот мой текущий код и результат:
$config = array();
$filehandle = @fopen($filename, "r");
while (!feof($filehandle))
{
$line = ereg_replace("/\n\r|\r\n|\n|\r/", "", fgets($filehandle, 4096));
$configArray = explode("=", $line);
$configKeys = explode(".", $configArray[0]);
$configValue = $configArray[1];
foreach ($configKeys as $key)
{
if (isset($head))
{
$last[$key] = array();
$last = &$last[$key];
}
else
{
$head[$key] = array();
$last = &$head[$key];
}
}
$last = $configValue;
$config += $head;
unset($head);
unset($last);
}
fclose($filehandle);
результат:
Array
(
[dinnes] => "salad"
[dish] => Array
(
[fruit] => Array
(
[first] => Array
(
[name] => "apple"
)
)
)
[dressing] => Array
(
[name] => "french"
)
)