Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск подстроки и её замена

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Itan
Отправлено: 12 Января, 2011 - 17:01:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Здравствуйте! Подскажите, пожалуйста, как мне реализовать следующее:

Есть строка "3,4,5,//"
Сначала нужно проверить, есть ли в этой строке подстрока "1". Если есть, то заменить её на подстроку "Слово1".
Если есть подстрока "2", то заменить её на "Слово2"
И так до подстроки "6" и "Слова6" соответственно.

Я пробовал делать с помощью str_replace:
PHP:
скопировать код в буфер обмена
  1.  
  2. $row[1]="3,4,5,"
  3.  
  4. $x.=str_replace("1", "Слово1", $row[1]);
  5. $x.=str_replace("2", "Слово2", $row[1]);
  6. $x.=str_replace("3", "Слово3", $row[1]);
  7. $x.=str_replace("4", "Слово4", $row[1]);
  8. $x.=str_replace("5", "Слово5", $row[1]);
  9. $x.=str_replace("6", "Слово6", $row[1]);
  10. print $x;
  11.  


Я думал, что это выведет строку "Слово3,Слово4,Слово5,", но выводит это:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. 3,4,5,//3,4,5,//Слово3,4,5,//3,Слово4,5,//3,4,Слово5,//3,4,5,//
  3.  


Я второй час не могу понять как это сделать, только дошло, что сначала нужно проверять наличие каждой подстроки, и если подстрока найдена, то только потом производить замену. Пробовал написать функцию, типа:
PHP:
скопировать код в буфер обмена
  1. function sstr ($what) {
  2. if (strpos($row[1], $what))
  3. {
  4.         return false;
  5. } else {
  6.         return true;
  7. }
  8.  
  9. if (sstr("1")) {
  10. $x.=str_replace("1", "Слово1", $row[1]);
  11. } //И т.д. до подстроки "6"
  12. print $x;
  13.  

Но почему-то сценарий вообще ничего не выводит...

Пробовал дописать так:
PHP:
скопировать код в буфер обмена
  1. if (sstr("1")) {
  2. $x.=str_replace("1", "Слово1", $row[1]);
  3. } else {
  4. print "BAD";
  5. }


Выводит BAD Недовольство, огорчение

Как бы сделать-то...
 
 Top
Мелкий Супермодератор
Отправлено: 12 Января, 2011 - 17:08:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




см примеры str_replace, ей на вход можно подать массивы, которые она за раз и обработает в соответствии: первый элемент массива будет заменяться на первый элемент второго массива.


-----
PostgreSQL DBA
 
 Top
Itan
Отправлено: 12 Января, 2011 - 17:26:27
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Спасибо, заработало)
 
 Top
OrmaJever Модератор
Отправлено: 12 Января, 2011 - 18:21:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




не нужно использовать такой оператор .=
PHP:
скопировать код в буфер обмена
  1. $row[1]="3,4,5,"
  2.  
  3. $x=str_replace("1", "Слово1", $row[1]);
  4. $x=str_replace("2", "Слово2", $x);
  5. $x=str_replace("3", "Слово3", $x);
  6. $x=str_replace("4", "Слово4", $x);
  7. $x=str_replace("5", "Слово5", $x);
  8. $x=str_replace("6", "Слово6", $x);
  9. print $x;

ну и как сказал Мелкий можно передать масив значний.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Itan
Отправлено: 12 Января, 2011 - 18:26:25
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




понял)) спасибо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB