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

Форум PHP

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

 

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

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

тема: Сравнение строк
 
 автор: shest   (25.11.2010 в 22:11)   письмо автору
 
 

Здравствуйте. Вот поставила в тупик простая задача сравнения строк. Нужно всего лишь сравнить введённую в text box фразу с фразой в базе. Причём без учёта регистра и пробелов
Делаю так
$str='дом гроза';
 if(isset($_POST['text']))
   {
      $str=strtolower($str);
      $cmp=explode(" ",$_POST['text']);
      for($l=0;$l<count($cmp);$l++) $cmp[$l]=trim($cmp[$l]);
      $_POST['text']=implode(" ",$cmp);
      $_POST['text']=strtolower($_POST['text']);
      if($str==$_POST['text'])echo "swdsfewfef";
      
   }


Ввожу после этого дом гроза
Равенства почему-то нет. Не могу разобраться, Помогите, если не трудно
Спасибо
Кстати, если вводить дом гроза, т.е. с тремя пробелами, strlen показывает, что пробелы как были, так и остались

  Ответить  
 
 автор: Trianon   (25.11.2010 в 22:25)   письмо автору
 
   для: shest   (25.11.2010 в 22:11)
 

Выводите содержимое переменных.
Не работайте вслепую.

  Ответить  
 
 автор: Shest   (25.11.2010 в 22:31)   письмо автору
 
   для: Trianon   (25.11.2010 в 22:25)
 

Вывожу, но они идентичны. Браузер не покажет пробелов между словами. Зато длина фраз разная не смотря на обработку. Основная проблема- убрать лишние пробелы между словами, чтобы адекватно сравнить, а они не убираются почему-то :(

  Ответить  
 
 автор: Trianon   (25.11.2010 в 22:44)   письмо автору
 
   для: Shest   (25.11.2010 в 22:31)
 

выводите значения внутри цикла. Вместе с индексом цикла.

поймете, что происходит, - можно будет говорить о том, как выкручиваться.

  Ответить  
 
 автор: Shest   (25.11.2010 в 23:12)   письмо автору
 
   для: Trianon   (25.11.2010 в 22:44)
 

Уф, понял, что происходит. При таком раскладе $cmp=explode(" ",$_POST['name']); все пробелы попадают в массив
Я побаиваюсь регулярных выражений, поэтому получилось следующее
<? $str='дом гроза';
 if(isset(
$_POST['name']))
   {
      
$cmp1=array();
      
$str=strtolower($str);
      
$cmp=explode(" ",$_POST['name']);
      for(
$l=0;$l<count($cmp);$l++)
          {
              if(
$cmp[$l]=="") continue;
              
$cmp1[]=$cmp[$l];
          }
      
$_POST['name']=implode(" ",$cmp1);
      
$_POST['name']=strtolower($_POST['name']);
      if(
$str==$_POST['name'])echo "swdsfewfef";
   } 
?>
Огромное всем спасибо

  Ответить  
 
 автор: Trianon   (25.11.2010 в 23:14)   письмо автору
 
   для: Shest   (25.11.2010 в 23:12)
 

>Уф, понял, что происходит. При таком раскладе $cmp=explode(" ",$_POST['name']); все пробелы попадают в массив

не в массив, а скорее, между пустыми элементами массива.

Вам же более подошел бы вариант
<? 
do
{
  
$str1 $str0;
  
$str0 str_replace("  "" "$str1);
}while(
$str0 != $str1);


Между прочим, многие постоянно спрашивают, зачем do-while?
Вот пример, зачем.

  Ответить  
 
 автор: Shest   (25.11.2010 в 23:17)   письмо автору
 
   для: Trianon   (25.11.2010 в 23:14)
 

Да, верно. Просто не ожидал, что так будет. Потом print_r() посмотрел и ...

  Ответить  
 
 автор: Trianon   (25.11.2010 в 23:20)   письмо автору
 
   для: Shest   (25.11.2010 в 23:17)
 

и кстатии str_replace конечно много чего может. Но с регулярками стоит таки завести дружбу. Иногда очень помогает.

  Ответить  
 
 автор: Лена   (25.11.2010 в 23:02)   письмо автору
 
   для: shest   (25.11.2010 в 22:11)
 

Вам, наверное, лучше сначала убрать лишние пробелы(заменить несколько пробелов на один), а уже после сравнивать.

<?
$str
='дом гроза';
if(isset(
$_POST['text'])){ 
$str=strtolower($str);
$_POST['text']=strtolower($_POST['text']);
$a str_replace(preg_match("/[\s]+/",$_POST['text'])," ",$_POST['text']);
if(
$str==$a)echo "swdsfewfef";
}

  Ответить  
 
 автор: Trianon   (25.11.2010 в 23:03)   письмо автору
 
   для: Лена   (25.11.2010 в 23:02)
 

оно, конечно лучше, да только тогда тредстартер не поймет, что в его коде происходило.
И кстати, перезаписывать значения суперглобальных массивов после их исходного заполнения - дурной тон.
В сложном коде вообще не поймешь, что было на входе, а что позже вычислено.

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

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