2016-03-10 21 views
3

我有一個config.ini文件有很多這些類型的變量:PHP config.ini文件具有多級陣列分析

site.social.twitter = "URL" 
site.social.facebook = "URL" 
site.social.google-plus = "URL" 

我使用PHP的內置函數來解析INI。

$config = parse_ini_file(__DIR__ ."/../config.ini"); 

下一步是得到這個(site.social.twitter) 成爲陣列。

$config['site']['social']['twitter'] 

你可以'爆炸()',但它不完全達到那裏。有沒有比這更簡單的解決方案?

+1

「不完全到達」?你能解釋你得到的是什麼嗎?你期望得到什麼樣的配置? –

+0

你可以改變ini文件嗎?會更乾淨。 – AbraCadaver

+0

@AbraCadaver:你打敗了我。 :-) Justin - 查看parse_ini_file上的PHP文檔。只需將您的ini文件更改爲url ['site.social.twitter'],即可更加接近您想要的內容。這將允許你引用它作爲$ config ['url']並從那裏獲取數組。 –

回答

3

OK,所以你可以看看使用部分和INI文件,例如數組語法:

[site] 
social[twitter] = URL 
social[facebook] = URL 
social[google-plus] = URL 

然後通過true作爲第二個參數:

$config = parse_ini_file(__DIR__ ."/../config.ini", true); 

或使用你現有的INI結構(我很無聊)來構建:

$array = array(); 

foreach($config as $path => $value) { 
    $temp = &$array; 
    foreach(explode('.', $path) as $key) { 
     $temp =& $temp[$key]; 
    } 
    $temp = $value; 
} 
$config = $array; 
print_r($config); 
+0

不錯,得到愛的選擇!愛它。感謝@AbraCadaver – Justin

-1

是否只需引用$config['site']['social']就可以得到你想要的數組?按照documentation這應該產生:

Array 
    (
     [twitter] => "URL" 
     [facebook] => "URL" 
     [google-plus] => "URL" 
    ) 
+0

它不,beucase的參考是,site.social – Justin

+0

什麼的參考?你想要參考什麼?你期望什麼結果?你究竟得到了什麼? –

+0

那麼,如果你這樣做,$ ini = parse_ini_string(「site.social.twitter」);它仍然是,$ ini ['site.social.twitter'] ......它不會分裂它們。我的目標是,$ ini ['site'] ['social'] ['twitter'] – Justin