Увидел на хабре задачку при собеседовании для php программистов http://habrahabr.ru/blogs/php/116686/
Решил попробовать сам ее решить, вроде не сложно. вместе с отладкой, сделал за ~20минут, т.е. в норматив не уложился, что херово.
Получилось вот так, хз насколько это оптимально. Есть идеи что улучшить?
<?php
function read_conf($path)
{
$f=file_get_contents($path);
//разбиваем на строки
$lines=explode("\n",$f);
$tmp=array();
//режем строки на key=>value
foreach($lines as $v)
{
if (trim($v)!="")
{
list($key,$value)=explode("=",$v,2);
$tmp[trim($key)]=trim($value);
}
}
$res=array();
//режем ключи по параметрам
foreach ($tmp as $key=>$value)
{
$keys=explode(".",$key);
if (count($keys)!=1)
{
//тут будем делать подмассивчики
$key=array_pop($keys);
$first_key=array_shift($keys);
if (!isset($res[$first_key]))
{
$res[$first_key]=array();
}
$pres=&$res[$first_key];
while (count($keys)!= 0)
{
$tmp_key=array_shift($keys);
if (!isset($pres[$tmp_key]))
{
$pres[$tmp_key]=array();
}
$pres=&$pres[$tmp_key];
}
$pres[$key]=$value;
}
else
{
$res[$key]=$value;
}
}
return $res;
}
print_r(read_conf("conf.ini"));
?>