用php查找并替换txt文件中特定行的特定字符串
我想知道如何用php将特定行的特定单词/字符串替换为文本文件 文本文件内容如下:用php查找并替换txt文件中特定行的特定字符串,php,html,text,web,replace,Php,Html,Text,Web,Replace,我想知道如何用php将特定行的特定单词/字符串替换为文本文件 文本文件内容如下: 1|1|1 nikki|nikki@yahoo.com|nikki nikki|nikki@gmail.com|nikki nikki|nikki@hotmail.com|nikki 字段的详细信息: COLUMN:0 = $name, COLUMN:1 = $email, COLUMN:2 = $nickname, 更换详情: COLUMN:0 = $newName, COLUMN:1 =
1|1|1
nikki|nikki@yahoo.com|nikki
nikki|nikki@gmail.com|nikki
nikki|nikki@hotmail.com|nikki
字段的详细信息:
COLUMN:0 = $name,
COLUMN:1 = $email,
COLUMN:2 = $nickname,
更换详情:
COLUMN:0 = $newName,
COLUMN:1 = $newEmail,
COLUMN:2 = $newnickName,
根据以上内容,您可以猜测查找/搜索基于以下列:1。如果找到匹配项,则替换列0或列2[根据选择]
我尝试[寻找专栏:1]:
$fileData = file("file.txt");
foreach($fileData as $Key => $Val) {
$Data[$Key] = explode("|", $Val);
if ( trim($Data[$Key][1]) == $email ){
unset($fileData[$Key]);
//REPLACE TAKE PLACE HERE
break;
}
}
[用于替换]:
/* REPLACE NAME */
$file = "file.txt";
$oname = "|$name|";$nname = "|$newName|";
file_put_contents($file, str_replace($oname, $nname, file_get_contents($file)));
/* REPLACE NICKNAME */
$file = "file.txt";
$onickname = "|$nickname|";$nnickname = "|$newnickname|";
file_put_contents($file, str_replace($onickname, $nnickname, file_get_contents($file)));
但它正在替换所有匹配的“$name”
我还尝试了以下方法:
$fileData[$Key] = str_replace($name, $newName, $fileData[$Key]);
file_put_contents($file,$fileData);
/* $name & $newName -:> $nickname & $newnickname
但它不起作用
如果要替换列:0[“nikki”]of“nikki@gmail.com“使用“nikkigmail”,则数据应为:
1|1|1
nikki|nikki@yahoo.com|nikki
nikkigmail|nikki@gmail.com|nikki
nikki|nikki@hotmail.com|nikki
如果要替换列:2[“nikki”]of“nikki@hotmail.com“hotmail”,然后:
我可以更正代码吗?以下是我将如何替换类似的代码。与其担心str_replace,不如实际修改
文件返回的数组
<?php
$email = "nikki@gmail.com"; // Search email
$data = file("file.txt", FILE_IGNORE_NEW_LINES); // Read in the data
foreach($data as $key => $line) {
$bits = explode("|", $line);
if($bits[1] === $email) {
// Update this in place,
$bits[0] = "nikkigmail";
$data[$key] = implode("|", $bits);
}
}
$write = implode("\n", $data); // the data to write however you please.
你能发布你的预期结果吗?@Shankar:谢谢你的回复。我已经发布了预期的代码。替换代码1工作正常,但这将替换文本文件中所有匹配的$name,而不仅仅是列0或列2。我只想基于列1替换列0或列2字符串,我没有询问代码。。我的意思是您希望文本文件的最终输出是什么。(更换后)您是否尝试过此步骤?1:以读取模式打开文件。2.更换所需位置上的内容。3.然后以写模式打开文件。4.然后写被替换的内容。例如:如果我想替换列:1 of“nikki@gmail.com用“nikkigmail”,然后是nikki|nikki@yahoo.com|nikki
nikkigmail|nikki@gmail.com|nikki
nikki|nikki@hotmail.com|nikki
这正是解决问题的方法。OP的问题不是使用任何形式的搜索和替换;它隐式地将数据视为二维数组(其中文件中的行是行,管道创建列)。@Tristan:hmmm。。。lukin很好的一段代码:)让我试试这个,记住我实际上还没有在数据上测试过这个,你可能不得不修改它,如果你有任何问题,让我知道,我可以看看。顺便说一下,它实际上没有写任何数据,我把那部分留给你去做。最后的变量$write
包含您需要写入的所有文件文本内容。我使用“$fp=fopen(“text.txt”,“a”)或die(“无法打开$file进行写入!\u success”);fwrite($fp,introde(“\n”,“$data”)或die(“无法将值写入文件!\u success”);fclose($data);”代替“$write”。这段代码只是复制一份文件内容,并将它们添加到文件的最后一行,当使用“w”[write]时,只需复制一份文件,并将其替换为一行内容
<?php
$email = "nikki@gmail.com"; // Search email
$data = file("file.txt", FILE_IGNORE_NEW_LINES); // Read in the data
foreach($data as $key => $line) {
$bits = explode("|", $line);
if($bits[1] === $email) {
// Update this in place,
$bits[0] = "nikkigmail";
$data[$key] = implode("|", $bits);
}
}
$write = implode("\n", $data); // the data to write however you please.
/**
* The reason these are named differently is because they don't always
* search/replace. For example, you can find nikki@gmail.com in one row,
* but just be setting a different column in that row to a value..
*/
$match = array('col' => 1, 'str' => 'nikki@gmail.com'); // Search data at row
$update = array('col' => 0, 'str' => 'nikkigmail'); // Replace data at row
$data = file("file.txt", FILE_IGNORE_NEW_LINES); // Read in the data
foreach($data as $key => $line) {
$bits = explode("|", $line);
if($bits[$match['col']] === $match['str']) {
// Update this in place,
$bits[$update['col']] = $update['str'];
$data[$key] = implode("|", $bits);
}
}
$write = implode("\n", $data); // the data to write however you please.