用php查找并替换txt文件中特定行的特定字符串

用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 =

我想知道如何用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 = $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.