Заменить строку в файле и сохранить его

Radzhab

Новичок
Код:
name1|name2|yes
name3|name4|yes
name4|name5|yes
В переменную $glob я занес "name4". Я прохожу в цикле по строкам файла. Нахожу строку в которой есть вхождение строки "name4". Как поменять аттрибут "yes" на "no" и сохранить его
PHP:
 $file = fopen('1.txt','r+');
        if($file)
        {
            while(!feof($file))
            {
                $i = fgets($file,1024);
                $i = explode("|",$i);
                if( strcmp ( $glob, $i[0])==0  ){
                  $string = str_replace("yes","no",$i[2]);
                //
                }
            }
        }
        fclose($file);
Вот что я хочу получить на выходе
Код:
  name1|name2|yes
  name3|name4|no
  name4|name5|yes
 

Radzhab

Новичок
Блин.. Вроде запись делаю а он append делает. Добавляет в конец
PHP:
 $file = fopen('1.txt','r+');
        if($file)
        {
            while(!feof($file))
            {
                $i = fgets($file,1024);
                $i = explode("|",$i);
                if( strcmp ( $glob, $i[0])==0  ){
                  $string = str_replace("yes","no",$i[2]);
                  fwrite($file,$string);
                //
                }
            }
        }
        fclose($file);
Код:
name1|name2|yes
name3|name4|yesno
name4|name5|yes
 

AnrDaemon

Продвинутый новичок
"Он" делает точно то, что вы ему сказали делать.
 

Radzhab

Новичок
Друзья. Зачем столько сложностей) Спасибо за советы, но мне нужна одна строчка кода всего лишь. Я не собираюсь учить Php. Мне нужен только этот кусок кода. Почему я могу зайти на codeproject задать вопрос и мне сразу скажут ответ, зайду на stackoverflow там тоже туева куча ответов.
 

vasinsky

Новичок
если файл будет относительно не большого размера, то можно так

PHP:
  function changeStatus($user, $status){
      $file = __DIR__.'/users.txt';
     
      if(!file_exists($file)){
            return array('success'=>false, 'error'=>'Файл не найден');
      }
      else{
            $data = file('users.txt');
           
            foreach($data as $k=>$v){
              $temp = explode('|', $v);
             
              if($temp[0] == $user || $temp[1] == $user){
                  $temp[2] = $status;
              }
             
              $string = implode("|", $temp);

              $res_data[] = strtr($string, array(PHP_EOL=>''));
             
            }
           
            if(!file_put_contents($file, implode(PHP_EOL, $res_data))){
                return array('success'=>false, 'error'=>'Ошибка записи в файл');
            }
            else{
                return array('success'=>true);
            }

      }   
  }
 
  $user = 'name4';
  $status = 'no';
 
  $result = changeStatus($user, $status);
 //Просмотр результата выполнения функции
  echo '<pre>' . print_r($result, 1) . '</pre>';
конечно в функции не учтены косяки - которые могут быть в структуре файла, также - подразумевается что в тексте файла - "|" используется в качестве разделителя и нигде более
 
Сверху