2010-04-21 86 views
2

我有一個保存到文件的值的序列化數組,需要更改其中一個變量的值。在示例中,我更改$ 2的值,然後將整個數組保存到具有新值的文件中。使用unserialize()和serialize()更改已保存文件中的值的PHP使用

是否有一種更有效的方式來改變只有單個值而不必讀取和寫入整個文件/數組。

$data = file_get_contents('./userInfo'); 

$data = unserialize($data); 
extract($data); 
$two="this is a altered value"; 

$userData = array(
     'one'   => $one, 
     'two'   => $two, 
     'three'  => $three 
     ); 

$file=fopen("../userInfo",'w'); 
     fwrite($file, $userData); 
fclose($file); 
+0

*(相關)* http://stackoverflow.com/questions/2237291/php-reading-file/2237315#2237315 – Gordon 2010-04-21 20:52:59

回答

1

選項1:每個數組條目的數據庫行。

選項2:每個數組條目的不同文件,使用文件名而不是數組鍵。基本上在文件系統中使用一個目錄作爲一個非常簡單的數據庫。

選項3:在平面文件中固定大小的條目,因此您可以將數組索引乘以塊大小進行讀取和寫入。您將不得不截斷大於您選擇的塊大小的數據。基本上使用單個文件作爲一個非常簡單的數據庫。

+0

選項1已停用。這是我嘗試不使用數據庫的情況,有時候會導致殺死數據。 選項2是一個體面的想法,但可能會變得混亂。 選項3實際上是一個有趣的想法,我可能必須這樣試試。 – Prospero 2010-04-21 20:48:21

6

你並不需要使用extract()重建$userData這樣的 - 只訪問你需要的數組鍵。此外,您還可以通過使用file_put_contents()

此功能是相同的保存幾步調用 fopen()函數,fwrite()將和FCLOSE() 先後將數據寫入一個文件。

新代碼:

+0

謝謝你是完美的。 – Prospero 2010-04-21 20:32:10

+0

我回頭看了這個,它確實讓我的代碼更容易閱讀,這總是很好,但它是我的問題相同的代碼。 – Prospero 2010-04-21 20:41:20

+0

取決於你如何定義「相同」。我向你展示瞭如何更容易地修改單個值。你還在找什麼? – 2010-04-21 20:45:34

0

如果你願意做手工字符串解析,那麼你只需要重寫的值後發生的文件內容其餘部分,假設你改變長度的字符串。如果你不改變字符串的長度,你可以編輯。除非這個序列化的數據文件是非常大大,但我真的懷疑你會做任何事情,但讓它變慢。

雖然我不打擾。如果這對您造成性能問題,我會認真考慮一種不同的存儲格式。

相關問題