使用php

时间:2019-02-11 21:58:49

标签: php

我想根据条件修改.txt文件中的某些行。

CODE:(php)     

 $sur = "newsur";
 $nume = "newname";

 $contacte = [];
    if (file_exists("Contacts.txt"))
        {
        $find = fopen("Contacts.txt", "r");
        while ($Row = fgets($find))
            {
            $line = explode(";", $Row);
            $contact = ['Surname' => $date[0], 'Name' => $date[1], ];
            if ( $contact['Surname'] == "nume1" && $contact['Name'] == "nume2" )
                {

                $contact['Surname']=$sur;
                $contact['Name']=$nume;

                }
                $contacte[]=$contact;
            }
            fclose ($find);
        } 




$file = fopen("Contacts.txt", "w"); 
{
 if ($file){
foreach($contacte as $c){
 fwrite ($file,"{$c['Surname']};{$c['Name']} \n");
                       }
           }
}
fclose ( $file );
?>

我的文件有2行

nume1; nume2

nume3; nume4

我很确定自己搞砸了数组声明并得到了.txt文件元素,因为它会说我有未识别的变量。执行后,在此行

$contact = ['Surname' => $date[0], 'Name' => $date[1], ];

我将得到4个不确定的变量错误(因此,我有2行,每行2个元素),我的文档内容将被删除,只有“;”将再次添加。

1 个答案:

答案 0 :(得分:0)

这可以简化很多。由于要替换的行中分号定界符两侧的两个字符串都等于特定值,因此无需爆炸分号上的每一行并检查单独的部分,只需匹配整行即可。

$sur = "newsur";
$nume = "newname";

$contacts = [];
if (file_exists('Contacts.txt')) {
   $rows = file('Contacts.txt', FILE_IGNORE_NEW_LINES);              // get all the rows
   foreach ($rows as $row) {
      $contacts[] = ($row == 'nume1;nume2') ? "$sur;$nume" : $row;   // replace matching rows
   }
}
file_put_contents('Contacts.txt', implode("\n", $contacts));         // write results