2012-05-28 167 views
2

我在這裏搜索了很多,但沒有解決我的問題(PHP)。刪除文件中的完全匹配

場景:用戶訪問帶有預先分配的註冊號碼(在datafile.txt中)的登錄頁面時,在字段中輸入數字時,如果存在號碼,腳本將搜索文件。

如果確實存在,請繼續下一步。當下一步完成時,我希望它自動「刪除」一次完成後最初使用的號碼。

我相信一個「搜索和替換」是要走的路,而搜索一個「確切」的匹配。

我的數據文件將類似於以下:(datafile.txt)

0 
12 
123 
1234 
12345 
123456 

12中,如果搜尋將不一樣123。

,我是這麼好心給前幾天是這樣來完成其他任務的腳本:

$numbers = file_get_contents("datafile.txt"); 

$uNumber = $_POST['uNum']; 

if (@preg_match("/([^0-9]{$uNumber}[^0-9])/", $numbers)) { 

echo "Numbers match"; 

} 

我嘗試了一個新的任務做的,是下面的,但沒有成功:

$numbers = file_get_contents('datafile.txt', 'w+'); 

$uNumber = $_POST['uNum']; 

if (@preg_match("/([^0-9]{$uNumber}[^0-9])/", $numbers)) { 

$numbers = preg_replace('.$_Post["uNum"]','',$numbers); 

echo "Existed but will be deleted from file. "; 


} else { 
echo "Message showed if not in file."; 
} 

任何幫助將不勝感激。

+0

你在那裏做的只是替換$ uNumber的值。實際上你想要做的就是替換$ uNumber的值,並將其保存爲文件的新內容。如我錯了請糾正我。 – magicianiam

+0

是的。一旦最初輸入1234(uNum),我希望之後將其從文件中刪除。 –

+0

然後你應該在數字被刪除後更新文件。嘗試在變量更新後使用http://www.php.net/manual/en/function.file-put-contents.php – magicianiam

回答

1

這個怎麼樣:

$index = file_get_contents("datafile.txt"); 
$bodycont = str_replace("string to be replaced","what you want that string to be",$index); 
$fh = fopen("datafile.txt","w"); 
fwrite($fh,$bodycont); 
fclose($fh); 

OR:

$file = file("datafile.txt", FILE_IGNORE_NEW_LINES); 
foreach($file as $text) { 
$test[] = $text; 
} 

//get the size of the array 

$arraysize = sizeof($test); 

//use for loop to check if that string is found in the array and replace it 

for($x=0;$x<$arraysize;$x++) 
    { 
       if($test[$x] == "$uNumber") 
       { 

       } 
       else 
       { 
        $newarray[] = $test[$x]; 
       } 
    } 
$stringData = implode("\n",$newarray); 
$fh = fopen("datafile.txt","w"); 
fwrite($fh,$stringData); 
fclose($fh); 

這應該以某種方式工作。 :D

+0

謝謝。現在玩弄它。我用文件中的數字1234進行了測試,並用1212替換了它,但文件中也存在123456,並且腳本將其更改爲121256.我需要完全匹配。我會堅持下去,直到我得到它。 LOL –

+0

然後你需要做的就是改變str_replace或者使用更好的條件。希望這個幫助。隨時提出或檢查它。謝謝:) – magicianiam

+0

@FredFletcher編輯我的答案,請檢查。 – magicianiam

0

如果它是每行文件的一個數字,請使用^$限制您的正則表達式以匹配確切的模式。

preg_match("/^({$uNumber})$/", $numbers) 
+0

感謝鮑里斯。我的代碼的其餘部分是否正確(第二部分),還是需要修改其他內容? –

0

爲什麼使用Regex這麼簡單的事情?你可以去這樣的:

<?php 
$numbers = file_get_contents("datafile.txt"); 
$uNumber = $_POST['uNum']; 

$numbers = explode($numbers, "\n"); 

foreach ($numbers as $num) { 
    if ($num == $uNumber) { 
     unset($num); 
    } 
} 

$numbers = implode($numbers, "\n"); 

// some code that saves the file 
?> 
+0

謝謝。我不能只使用$ numbers = file_get_contents(「datafile.txt」,「a」);將新內容寫入文件,或者我將如何處理它? –

+1

我想你想使用file_put_contents:http://php.net/manual/en/function.file-put-contents.php – casraf

+0

我試過file_put_contents($ numbers,$ uNumber);但它不適合我。可能會混淆一些東西。 –