我正在編寫配置編輯器。我正在逐行閱讀fopen和fgets文件。 我想從字符串中獲取數組鍵和值。我不熟悉正則表達式這就是爲什麼我問。從PHP源獲取數組鍵和值
示例配置文件:
$conf['something'] = 'value';
$conf['other_thing']['another_key'] = 3000;
我可以通過$的conf陣列不循環,因爲它是在系統中的超對象,並擁有許多額外的DATAS,甚至inited類...
我正在編寫配置編輯器。我正在逐行閱讀fopen和fgets文件。 我想從字符串中獲取數組鍵和值。我不熟悉正則表達式這就是爲什麼我問。從PHP源獲取數組鍵和值
示例配置文件:
$conf['something'] = 'value';
$conf['other_thing']['another_key'] = 3000;
我可以通過$的conf陣列不循環,因爲它是在系統中的超對象,並擁有許多額外的DATAS,甚至inited類...
\$conf\['(.*?)']\s+=\s+'(.*?)';
這裏是你的模式。鍵位於組1中,值位於組2中。
$
,[
和]
是特殊字符,因此您應該將其轉義。 \s+
表示空白字符1次或更多次。
這將是有效的沒有空白,所以我會使用'\ s *'。該數組也可以使用「key」而不是「key」有效,因此您需要對此進行解釋。價值也一樣。正如@ t1gor –
所提到的那樣,讀取這個數組好像更好一些。錯誤:發現無結尾分隔符'$' – wintercounter
ow ..在模式末尾添加$(無反斜槓) – shift66
這裏是你的正則表達式:
\$conf(\[('.*')\])+\s?=\s?(.*);
的第一場比賽是你的鑰匙,最後一個你的價值
我得到這個錯誤:找不到結尾分隔符'$' – wintercounter
這可能是因爲第一個「\」在PHP中轉義字符串。 –
這個例子確實對數組的格式做了一些假設。它必須總是有1或0個空格,所以不應該添加TAB或多個空格。這個鍵總是由一個''''指定的,而不是'''',它也會捕獲一個值的引號,所以很可能需要修剪。總而言之,我會考慮使用@ t1gor發佈的選項或@ WebnetMobile.com –
我會做水木清華這樣的:
// 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);
如果您需要對該$ config變量進行範圍限制,以便它不會感染您的實際配置變量,那麼您可以將這個函數包裝在include中。 –
我不知道我在追隨。請加一個例子 – t1gor
'類configEditor(){' '私人$ CONF;' '函數load_config(){'' 包括 'config_file.php';'' $這 - > CONF = $配置;' –
雖然沒有直接回答你的問題,但正如你寫的「我正在編寫配置編輯器。」然後我假設你也寫下這個配置文件。因此,假如你的編輯器保持在配置陣列$conf
而它的作品,我只是放棄它作爲JSON,而不是你的PHP代碼:
file_put_contents('config.json', json_encode($conf));
,然後在需要
$conf = json_decode(file_get_contents('config.json'));
時,由於該讀回在PHP數組可以直接循環通過它,並獲得所需的鍵值對 其他你能,你可以使用PHP的功能array_keys從$ CONF陣列獲取所有鍵和array_values用於獲取數組值
否則
如果你想創建一個配置編輯器嘗試使用INI文件PHP具有用於創建和使用配置文件了很好的支持看到這個函數parse_ini_file這是一個用於創建配置文件,如果你有太多的鍵值對的標準方式
這不是一個現在的解決方案,但thx。 – wintercounter
因爲你有一個php數組爲什麼你要使用fopen再次閱讀它只包含文件並使用$ conf變量 –
爲什麼你讓自己的生活比它可能更難?以更可解析的格式編寫配置文件。 –
爲什麼要增加額外解析讓應用程序變慢?在我的情況下,只有在管理區域打開配置編輯器時才需要解析。 – wintercounter