2013-03-07 58 views
1

我試圖基於一些原因解析基本上沒有使用parse_ini_file的ini文件。我將文件完美地解析爲一個多維數組,並能夠正確地搜索它並完成所有內容。我遇到的問題是我想根據類型解析文件。文件中有字符串,浮點數和整數,我需要將它們存儲爲字符串而不是全部。PHP - 解析不同值類型的文件

用戶將需要能夠獲取存儲的值,所以基本上他們會做「使用預算鍵從頁眉部分獲取浮動值」,這將返回4.5。但是,如果他們試圖從同一節中獲取字符串或整數,它將會失敗。我有它能夠得到的鑰匙,但因爲他們都存儲爲字符串,這是唯一的作品。我想知道如何將字符串的值類型更改爲整型或浮點型。

任何人有任何想法如何做到這一點?

+2

你不能爲此使用parse_ini_file的原因是什麼?至於能夠解析類型,您可能需要將類型數據編碼到字符串中。例如,foo = string(bar)或類似的。如果數據越來越複雜,我真的建議你使用PHP的文件解析器(ini,json,xml等)或某種數據庫。 – GordonM 2013-03-07 23:43:34

+0

這是一個標準的ini文件還是你自己構建它? – Lix 2013-03-07 23:45:37

+0

它沒有像標準的ini文件那樣格式化,並且由於特殊字符而在嘗試使用它時引發錯誤。 – Zamereon 2013-03-07 23:56:14

回答

0

您可以使用type casting

型鑄造在PHP的工作就像在C的作用: 所需類型的名稱這是 被轉換的變量之前寫在括號中。

<?php 
$foo = 10; // $foo is an integer 
$bar = (boolean) $foo; // $bar is a boolean 
?> 

允許的強制轉換有:

(int), (integer) - cast to integer 
(bool), (boolean) - cast to boolean 
(float), (double), (real) - cast to float 
(string) - cast to string 
(array) - cast to array 
(object) - cast to object 
(unset) - cast to NULL (PHP 5) 
+0

我將如何確定它的值類型?它需要動態應用它們,因爲用戶可以更改文件的值。因此,在讀取文件時,需要讀取它並確定它是否應該是int,string或float。 – Zamereon 2013-03-07 23:57:38

1

這將是非常難以準確預測你在看什麼類型的值。字符串可能包含數字,小數點出現在句子中,等等......

如果您正在處理自己生成的自定義ini文件供您自己使用,那麼您可能可以將該類型的值編碼爲ini設置。標準制定可能看起來像這樣 -

default_username=Zamereon 

所以,你可以追加或預先準備的數據類型來設置 -

(s)default_username=Zamereon // one character depicting the data type, 
(i)default_reputation=1  // you could use strpos. 

default_balance=0.5=f // use list($name,$value,$type) = explode('=',$setting) 

參考 -


另一個建議是讓他們爲你解析多維數組的字符串,只有當你真正需要它們將它們轉換。在處理來自ini文件的一些輸入數據的代碼的函數或代碼行中,您將確切知道需要哪種數據類型,如果它是浮點數,只需要浮點數即可。沒有必要立即將每個變量轉換爲正確的形式,因爲它們的值在文本表示中不會改變; 轉換隻有在進行一些進一步的操作之前才需要進行。