快速更新:我之所以需要這個解決方案是,這一個PHP文件被用於擴大約上百個用戶的平面文件(即都使用相同的PHP文件,但有自己的平面文件)如何使用PHP將新列添加到平面文件?
SOLUTION:
我這一個多一天的工作,改寫這個問題,並得到了一個真正偉大的答案。我在這裏添加它爲未來幫助他人:
$content = file_get_contents("newstest.db");
$content = preg_replace('/(^ID:.*\S)/im', '$1value4:::', $content);
$content = preg_replace('/(^\d+.*\S)/im', '$1:::', $content);
file_put_contents("newstest.db", $content);
平面文件的原始內容進行測試時的代碼是使用:
ID:::value1:::value2:::value3:::
1:::My:::first:::line:::
2:::My:::second:::line:::
3:::Your:::third:::line:::
原題:
我有一個我想修改的PHP腳本。作爲一名PHP新手,在這裏和谷歌搜索都沒有找到解決方案,我問這裏。
我需要在平面文件中添加更多的值(列),如果之前「列」不存在,將自動自動添加。因爲這一個PHP文件與許多用戶共享(每個用戶都有自己的平面文件),所以如果列不存在,我需要一種方法在他們的平面文件中自動添加新的「列」。手動操作非常耗時,我敢打賭有一個簡單的方法。
信息:
平面文件被命名爲 「newstest.db」
平面文件有這樣的佈局:
id:::title:::short:::long:::author:::email:::value1:::value2:::value3:::
所以分頻器:: :
我瞭解基礎知識,需要在news.db的第一行添加「value4 :::」後的實例「value4 :::」,然後將:::添加到其他現有行以更新所有行並準備新的「value4」
今天,php使用它來連接到平面文件: ($ filesource是平面文件的路徑,包括它的名稱。獨特的爲每個用戶)
$connect_to_file = connect_pb ($filesource);
並寫信給我使用的文件:
insert_pb($filesource,"$new_id:::$title:::$short:::$long:::$author:::$email:::$value1:::::::::");
(正如你在這種情況下,值2和3未在這種情況下使用看,但在其他。)
問題:
是否有一個快速/現有的PHP代碼中使用添加一個新列,如果它不存在?或者我需要爲這個特定任務製作php代碼嗎?
我明白的代碼必須做的東西一起:
- 如果「VALUE4」並不在$ filesource在0線存在
- 然後添加「VALUE4 :::」在行0結束,
- 並且對於其他每行添加「:::」結尾。
我不知道從哪裏開始,但我已經嘗試了幾個小時。
我明白這一點:
update_pb(pathtofiletosaveto,"id","x == (ID of news)","value in first line","value to add");
但我不知道如何使一個if語句作爲1)上述,無論是如何在平面文件更新行0添加「VALUE4 :::」末等
我的代碼(如意圖不工作):
或者,可能是我需要只讀取文件(newstest.db)中的第1行,然後在新的行中交換該行,如果「value4」不在第1行?
一個建議,但我不知道該怎麼做:(這可能完全錯誤的,因爲我已經試圖讀取並找到實例,並結合代碼)
<?php
// specify the file
$file_source="newstest.db";
// get the content of the file
$newscontent = file($file_source, true);
$lines ='';
// handle the content, add "value4:::" and ":::" to the lines
foreach ($newscontent as $line_num => $linehere) {
// add "value4:::" at the end of first line only, and put it in memory
if($line_num[0]) {$lines .= $linehere.'value4:::';}
else {
// then add ":::" to the other lines and add them to memory
$lines .= $linehere.':::';
}
// echo results just to see what is going on
//echo 'Line nr'.$line_num.':<br />'.$lines.'<br /><br />';
}
// add
// to show the result
echo "Here is the result:<br /><br />".$lines."<br /><br />";
//Write new content to $file_source
$f = fopen($file_source, 'w');
fwrite($f,$lines);
fclose($f);
echo "done updating database flat file";
?>
這ALMOST作品... 但它不添加「VALUE4 :::」到第一線, 的結束,它不添加「:::」到下到底線的,但開始...
所以有幾個問題仍然存在: 1)如何在「value4」之後的第0行中搜索,然後在行尾寫入「value4 :::」? 2)如何在每行的末尾添加「:::」,而不是在開頭?
我懇請你幫我解決這個問題。
把它轉換成CSV,讓你的生活變得更輕鬆;)你可以用一些在文件中找不到的獨特的特殊字符來代替':::',並用它作爲你的分隔符,然後用這個文件作爲一個csv使用PHP所具有的所有好的csv內容,然後只需替換':::'回來。 – dan08
請參閱[fgetcsv()](http://php.net/manual/en/function.fgetcsv.php)。您可以傳遞'...'作爲分隔符參數,將行的內容作爲數組處理,然後使用fputcsv()將其寫回。 –
@AlexHowansky您只能使用單個字符作爲分隔符。 – dan08