2012-11-23 83 views
0

我正在編寫配置編輯器。我正在逐行閱讀fopen和fgets文件。 我想從字符串中獲取數組鍵和值。我不熟悉正則表達式這就是爲什麼我問。從PHP源獲取數組鍵和值

示例配置文件:

$conf['something'] = 'value'; 
$conf['other_thing']['another_key'] = 3000; 

我可以通過$的conf陣列不循環,因爲它是在系統中的超對象,並擁有許多額外的DATAS,甚至inited類...

+2

因爲你有一個php數組爲什麼你要使用fopen再次閱讀它只包含文件並使用$ conf變量 –

+0

爲什麼你讓自己的生活比它可能更難?以更可解析的格式編寫配置文件。 –

+0

爲什麼要增加額外解析讓應用程序變慢?在我的情況下,只有在管理區域打開配置編輯器時才需要解析。 – wintercounter

回答

0

\$conf\['(.*?)']\s+=\s+'(.*?)';這裏是你的模式。鍵位於組1中,值位於組2中。

$[]是特殊字符,因此您應該將其轉義。 \s+表示空白字符1次或更多次。

+0

這將是有效的沒有空白,所以我會使用'\ s *'。該數組也可以使用「key」而不是「key」有效,因此您需要對此進行解釋。價值也一樣。正如@ t1gor –

+0

所提到的那樣,讀取這個數組好像更好一些。錯誤:發現無結尾分隔符'$' – wintercounter

+0

ow ..在模式末尾添加$(無反斜槓) – shift66

0

這裏是你的正則表達式:

\$conf(\[('.*')\])+\s?=\s?(.*); 

的第一場比賽是你的鑰匙,最後一個你的價值

+0

我得到這個錯誤:找不到結尾分隔符'$' – wintercounter

+0

這可能是因爲第一個「\」在PHP中轉義字符串。 –

+0

這個例子確實對數組的格式做了一些假設。它必須總是有1或0個空格,所以不應該添加TAB或多個空格。這個鍵總是由一個''''指定的,而不是'''',它也會捕獲一個值的引號,所以很可能需要修剪。總而言之,我會考慮使用@ t1gor發佈的選項或@ WebnetMobile.com –

2

我會做水木清華這樣的:

// get config file as a variable 
require_once('config_file.php'); 

// get keys 
$keys = array_keys($conf); 

// get config file as a variable 
$values = array_values($conf); 
+0

如果您需要對該$ config變量進行範圍限制,以便它不會感染您的實際配置變量,那麼您可以將這個函數包裝在include中。 –

+0

我不知道我在追隨。請加一個例子 – t1gor

+0

'類configEditor(){' '私人$ CONF;' '函數load_config(){'' 包括 'config_file.php';'' $這 - > CONF = $配置;' –

1

雖然沒有直接回答你的問題,但正如你寫的「我正在編寫配置編輯器。」然後我假設你也寫下這個配置文件。因此,假如你的編輯器保持在配置陣列$conf而它的作品,我只是放棄它作爲JSON,而不是你的PHP代碼:

file_put_contents('config.json', json_encode($conf)); 

,然後在需要

$conf = json_decode(file_get_contents('config.json')); 
0

時,由於該讀回在PHP數組可以直接循環通過它,並獲得所需的鍵值對 其他你能,你可以使用PHP的功能array_keys從$ CONF陣列獲取所有鍵和array_values用於獲取數組值

否則

如果你想創建一個配置編輯器嘗試使用INI文件PHP

具有用於創建和使用配置文件了很好的支持看到這個函數parse_ini_file這是一個用於創建配置文件,如果你有太多的鍵值對的標準方式

+0

這不是一個現在的解決方案,但thx。 – wintercounter