2012-04-09 59 views
1

我無法弄清楚如何使用fopen「a」追加模式寫入文件。使用fopen創建PHP數組並追加

文件本身是一個簡單的PHP數組:

$array = array(
    "entry1" => "blah blah", 
    "entry2" => "forbarbaz", 
); 

簡單。因此,使用FOPEN與第二ARG設置爲「A」應該允許我使用的fputs追加文件....問題是開閉線,即$array = array();

所以現在的文件應該是這樣的:

"entry1" => "blah blah", 
    "entry2" => "forbarbaz", 

我將如何在這個數據重建成一個工作PHP數組假設它只是項不開閉線列表的txt文件?對不起,如果這不清楚,它有點複雜。不,我不打算將這些值存儲在數據庫中,我需要通過將這些特定值保存在文件數組中來獲得速度優勢。

所以問題真的是我將如何去構建可用的PHP數組從txt文件中逐行列表像這樣?

澄清:

我如何拉一個txt文件,這樣的臺詞:

"entry1" => "blah blah", 
    "entry2" => "forbarbaz", 

,並具備可操作性$ php_array()????

+0

我已經讀了5次你的問題,我仍然不明白你想達到什麼目的。 – 2012-04-09 19:00:45

+0

檢查問題最後一段 – Nick 2012-04-09 19:04:03

+0

@Nick似乎不可能實現你所需要的w/o額外的頭痛。你不能執行**無效的** php-code作爲php-code。所以你必須像使用非php文件一樣處理文件(即按照其中一個答案中的建議''eval',或者以某種方式讀取它),或者按照我的建議使其成爲** valid ** php-file。 – Botanick 2012-04-09 19:08:17

回答

1

試試這個。

文件格式(在使用它的開頭):

<?php 
$array = array(); 

現在是正確的PHP文件。

然後簡單地添加新的行狀如下:

$f = fopen('myarray.php', 'a'); 
fputs($f, PHP_EOL.'$array["entry1"] = "value1";'); 
fclose($f); 

而且只需include('myarray.php');

+0

我喜歡那樣。簡單但又一次,不是真正的我在尋找什麼。 – Nick 2012-04-09 19:00:41

+0

你能詳細解釋一下你在找什麼嗎? Botanick的解決方案將爲您提供一個包含您可以在將該文件包含到另一個文檔中後引用的值數組的文件。不知道你需要什麼根據你的初始描述... – 2012-04-09 19:03:14

+0

因爲這是最接近的解決方案,我將獎勵Botanick的答案..最後,雖然我決定讀取當前數組值和重新 - 寫整個數組。雖然這個答案確實允許我將項目追加到靜態文件中的數組,但會導致重複分配。 – Nick 2012-04-12 21:26:18

0

爲什麼不把json_encode當你將它存儲在文件中然後把json_decode當你從文件中提取出JSON到數組中?

json_encode
json_decode

+0

不,我不想改變數據存儲機制,事實上JSON是在wrond方向邁出的一步,並沒有解決「追加」問題。隨着時間的推移,這個文件將會不斷更新 - 它將持有一些語言翻譯的價值。我不在乎服務器如何沉重地創建這個數組,但是閱讀它必須儘可能快。 – Nick 2012-04-09 18:57:26

0

未經檢驗。試試這個:

$data = file_get_contents('./data.txt', true); 
$array = eval("array(".$data.")"); 

僅供參考,shiplu.mokadd.im的解決方案是最簡單的。

0

使用它也許你正在尋找的FSEEK功能:http://se.php.net/fseek

當打開一個文件r+模式下,文件指針位於文件的開頭。聽起來你想把它放在文件末尾減去幾個字節,然後寫下你的新數據。

+0

在附加模式下,fseeks行爲未定義。重新閱讀你給出的鏈接 – 2012-04-09 19:04:33

+0

這是正確的思想,但不是正確的答案。 – Nick 2012-04-09 19:27:52

+0

@ shiplu.mokadd.im謝謝。我編輯了我的答案。 – 2012-04-12 17:38:19