Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как заменить строку целиком, если есть вхождение?
Kuzma92  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 1 месяц, 21 день
Карма:




Здравствуйте уважаемые специалисты.
У меня есть такая функция:

	$old_cat = $_POST['cat_old'];
$new_cat = $_POST['cat_red'];
$folder_rec = "db/rec";

replace_txt($folder_rec , $old_cat , $new_cat);

function replace_txt($folder_rec , $old_cat , $new_cat) {
$dir_rec = opendir($folder_rec);
while(false !== ($file_rec = readdir($dir_rec))) {
if($file_rec != '.' && $file_rec != '..') {
$file_path_rec = ($folder_rec."/".$file_rec);
if(is_file($file_path_rec)) {
$file_rec_content = file($file_path_rec);
$file_rec_content[1] = str_replace($old_cat , $new_cat , $file_rec_content[1]);
file_put_contents($file_path_rec , implode('',$file_rec_content));
}
}
}

closedir($dir_rec);
}


с помощью которой производится поиск в файлах в определенной строке, и если есть совпадение, то происходит замена этой строки. Точнее получается так, что заменяется не вся строка целиком, а только найденное слово. Например, есть две категории:
'Very'
'Very Good'
и если я меняю категорию 'Very' на 'Very Very', то замена происходит везде где встречается 'Very' и получается так:
'Very Very'
'Very Very Good'.
Но как сделать так, чтобы замена происходила только тогда, когда есть полное совпадение между имеющимся значением и строкой целиком? Я пытаюсь делать такое сравнение:

function replace_txt($folder_rec , $old_cat , $new_cat) {
$dir_rec = opendir($folder_rec);
while(false !== ($file_rec = readdir($dir_rec))) {
if($file_rec != '.' && $file_rec != '..') {
$file_path_rec = ($folder_rec."/".$file_rec);
if(is_file($file_path_rec)) {
$file_rec_content = file($file_path_rec);
if($old_cat == $file_rec_content[1]) { //сравниваю старое значение со строкой
$file_rec_content[1] = str_replace($old_cat , $new_cat , $file_rec_content[1]);
file_put_contents($file_path_rec , implode('',$file_rec_content));
}
}
}
}

closedir($dir_rec);
}


но при этом тогда вообще нигде замены не происходит. Подскажите, пожалуйста, верный вариант решения задачи.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 696
Пользователь №: 39616
На форуме: 10 лет, 11 месяцев, 14 дней
Карма: 71




FILE_IGNORE_NEW_LINES может помочь:
$file_rec_content = file($file_path_rec, FILE_IGNORE_NEW_LINES);

Ну и тогда потребуется при записи в файл добавить переносы строк:
file_put_contents($file_path_rec, implode("\n", $file_rec_content));

То есть в итоге будет так:
$file_rec_content = file($file_path_rec, FILE_IGNORE_NEW_LINES);
if ($old_cat == $file_rec_content[1]) {
$file_rec_content[1] = $new_cat;
file_put_contents($file_path_rec, implode("\n", $file_rec_content));
}


--------------------
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kuzma92  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 81
Пользователь №: 46556
На форуме: 1 год, 1 месяц, 21 день
Карма:




brevis, спасибо вам большое за ответ! Но у меня получилось даже немного проще, просто использовал trim, сделал вот так:
if(trim($file_rec_content[1]) == $old_cat) { //сравниваю старое значение со строкой
$file_rec_content[1] = str_replace($old_cat , $new_cat , $file_rec_content[1]);
file_put_contents($file_path_rec , implode('',$file_rec_content));
}

и теперь всё работает.
brevis, как всегда искренне благодарен за помощь!
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса