Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос о поиске и замене подстроки в строке
 
 автор: c-basso   (16.08.2011 в 17:13)   письмо автору
 
 

Здравствуйте, я недавно начал изучать программирование и PHP, и у меня возник такой вопрос:

<?php

$str 
'наша модель ИПК-00-80 немного отличается от модели ИПК-00-80 (М)';

$array = array( 'ИПК-00-80''ИПК-00-80 (М)' );

foreach( 
$array as $arr ){
    
$str str_replace$arr'<a href="/'.$arr.'">'.$arr.'</a>'$str );
}

echo 
$str;
?>


выведет >>> наша модель <a href="/ИПК-00-80">ИПК-00-80</a> немного отличается от модели <a href="/ИПК-00-80">ИПК-00-80</a> (М)
а если поставить элементы массива в другом порядке, сделает ссылку внутри ссылки.


вопрос - какие есть способы сделать так чтобы все встречающиеся в строке элементы массива были заменены на ссылки и без ошибок?

  Ответить  
 
 автор: c-basso   (16.08.2011 в 23:16)   письмо автору
 
   для: c-basso   (16.08.2011 в 17:13)
 

неужели никто не знает как такое делается?

  Ответить  
 
 автор: Valick   (16.08.2011 в 23:35)   письмо автору
 
   для: c-basso   (16.08.2011 в 23:16)
 

да как вам сказать...
это для вас ИПК-00-80 и ИПК-00-80 (М) - разные вещи
а для скрипта ИПК-00-80 и ИПК-00-80 (М) одно и тоже
нужно было писать ИПК-00-80_(М)

  Ответить  
 
 автор: c-basso   (16.08.2011 в 23:59)   письмо автору
 
   для: Valick   (16.08.2011 в 23:35)
 

и это не поможет, в первый раз ИПК-00-80_(М) превратится в <a href="/ИПК-00-80">ИПК-00-80</a>_(М) а во второй раз ничего не буде найдено. Интересно было бы узнать существует ли вообще способ решения подобных задач

  Ответить  
 
 автор: Valick   (17.08.2011 в 00:51)   письмо автору
 
   для: c-basso   (16.08.2011 в 23:59)
 

и это не поможет
поможет если разбивать строку в массив
а затем менять на нужные строки и собирать массив обратно в строку

  Ответить  
 
 автор: sl1p   (17.08.2011 в 03:22)   письмо автору
 
   для: c-basso   (16.08.2011 в 23:16)
 

.

  Ответить  
 
 автор: julpierto   (17.08.2011 в 17:33)   письмо автору
 
   для: sl1p   (17.08.2011 в 03:22)
 

Не могу предложить ничего более оригинального, чем такое решение:
<?php
$str 
"nasha model IPK-00-80 nemnogo otli4aetsya ot modeli IPK-00-80 (M)";
$search = array('IPK-00-80 (M)','IPK-00-80');

 foreach (
$search as $value)
   {
     
$replace str_replace ($value'<a href="/'.$value.'">'.$value.'</a>'$str$count);
   }

$replace str_replace ('">IPK-00-80</a> (M)'' (M)">IPK-00-80 (M)</a>'$replace);
echo 
"$replace <br>";
echo 
$count;
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования