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

Форум PHP

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

 

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

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

тема: Как задать множественные условия для str_replace.
 
 автор: Ярослав82   (17.04.2016 в 15:22)   письмо автору
 
 

Здравствуйте.

Есть код, который позволяет ввести в первое текстовое поле запрос, а во втором выводится ответ.

<?php header('Content-type: text/html; charset=windows-1251')?>

<?
    $b 
'';
    if(isset(
$_POST['a'])){
        
$b $_POST['a'];
    }
?>

<?
$s 
$b;

$s str_replace("когда началась Великая Отечественная война""22 июня 1941 года"$s);
$b $s;
?>

<html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<body>
<br>
В первое текстовое поле введите запрос. Нажмите кнопку "отправить". 
<br><br>
<form method="post">
<input type='text' size="100" name='a'><br>
<input type='textarea' size="100" name='b' value='<?=$b?>'> 
<input type='submit' value="Отправить">
</form>
</body>
</html>


Всё прекрасно работает. Можно добавить ещё и этот код:

<?
function check_string($b$words)
{
    foreach(
$words as $word)
    {
        if(
strpos($b$word) !== false)
            continue;
        else
        {
            return 
false;
        }
    }
    return 
true;
}
$words = array('война''великая');
if(
check_string($b,$words))
$s $b;
$s str_replace("какой-то текст""замена этого текста"$s);
$b $s;
?>


Тоже всё хорошо работает.

Но как задать несколько множественных условий? Т.е. чтобы при наличии в запросе разных слов действовали другие правила замены.

  Ответить  
 
 автор: confirm   (17.04.2016 в 15:50)   письмо автору
 
   для: Ярослав82   (17.04.2016 в 15:22)
 

Первые два аргумента функции str_replace могут быть массивами.

  Ответить  
 
 автор: Ярослав82   (17.04.2016 в 16:08)   письмо автору
 
   для: confirm   (17.04.2016 в 15:50)
 

А можно какой-нибудь пример использования аргументов в качестве массива?

Что-то вроде этого?

$s = str_replace(array("какой-то текст", "замена этого текста", $s));

  Ответить  
 
 автор: confirm   (18.04.2016 в 13:27)   письмо автору
 
   для: Ярослав82   (17.04.2016 в 16:08)
 

Что трудно заглянуть в руководство?

  Ответить  
 
 автор: Ярослав82   (18.04.2016 в 23:05)   письмо автору
 
   для: confirm   (18.04.2016 в 13:27)
 

Вот эта часть кода

$aa = array("япония", "франция", "сша");
$s = str_replace($aa, "три страны", $s);


заменяет каждое слово из массива на строку замены. Мне же нужно, чтобы все слова из массива выступали в качестве условия (if). Т.е.:

если в строке запроса присутствуют слова "япония", "франция" и "сша", то заменить $search на $replace. 


Что-то вроде этого:
if $aa = contains (array("япония", "франция", "сша")); 
Then
$s = str_replace("одна страна", "три страны", $s);
if $aa = contains (array("япония", "франция")); 
Then
$s = str_replace("одна страна", "две страны", $s);


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

  Ответить  
 
 автор: confirm   (19.04.2016 в 13:57)   письмо автору
 
   для: Ярослав82   (18.04.2016 в 23:05)
 

Вряд ли в этом случае str_replace подходящее, скорее str_ireplace, а если условия могут быть более сложными, то preg_replace.

  Ответить  
 
 автор: Ярослав82   (19.04.2016 в 14:54)   письмо автору
 
   для: confirm   (19.04.2016 в 13:57)
 

Может есть пример использования str_ireplace или регулярных выражений хотя бы для двух условий? Может всё дело в формах, которые не воспринимают условия? С помощью echo условия срабатывают (пример я приводил), но сразу же. А нужно, чтобы после ввода запроса. И вот здесь-то ничего не происходит. Может проблема с формами, может нужно другое условие, может ошибка в синтаксисе... Не хватает мне опыта разобраться в простой на первый взгляд проблеме.

  Ответить  
 
 автор: confirm   (21.04.2016 в 13:44)   письмо автору
 
   для: Ярослав82   (19.04.2016 в 14:54)
 

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

  Ответить  
 
 автор: Ярослав82   (19.04.2016 в 00:57)   письмо автору
 
   для: Ярослав82   (17.04.2016 в 15:22)
 

Пытаюсь копать дальше.

Этот код хотя и с ошибками (Warning: stristr(): needle is not a string or an integer), но хоть что-то делает - проверяет на наличие слова "yes" и "no" и сразу выводит результат.

<?
    $b 
'';
    if(isset(
$_POST['a'])){
        
$b $_POST['a'];
    }    
$z = array('yes''no');    
if(
stristr($a$z) === FALSE) {
echo 
'not found';  
}
?>


Но в таком виде:
<?
    $b 
'';
    if(isset(
$_POST['a'])){
        
$b $_POST['a'];
    }    
?>

<?
$z 
= array('yes''no');    
if(
stristr($a$z) === FALSE) {
$b 'not found';  
}
?>


категорически не хочет работать.

  Ответить  
 
 автор: indexer   (19.04.2016 в 03:40)   письмо автору
 
   для: Ярослав82   (19.04.2016 в 00:57)
 

честно сказать плохо понял условие задания, а именно непонятно, что на что нужно заменить.
Может так?


<?php
$replace 
= array(
                 
" Япония " => "одна страна",
                 
" Япония, Франция " => "две страны",
                 
" Япония, Франция, США " => "три страны"
                
);
echo 
strtr($text$replace);

  Ответить  
 
 автор: Ярослав82   (19.04.2016 в 14:47)   письмо автору
 
   для: indexer   (19.04.2016 в 03:40)
 

В вашем случае массив используется в качестве замены, а не в качестве условия.

Что-то такое нужно:
При наличии в запросе слов "x1" и "x2" слово "x" заменяется на слово "z". 
При наличии в запросе слов "x3" и "x4" слово "x" заменяется на слово "y". 


Cама по себе замена слов действует отлично, это легко сделать. А вот с условиями никак не могу разобраться.

  Ответить  
 
 автор: Ярослав82   (22.04.2016 в 23:52)   письмо автору
 
   для: Ярослав82   (17.04.2016 в 15:22)
 

Вопрос закрыт.

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

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