Помогите разобраться со str_ireplace

alexsnz75

Создатель
Регистрация
6 Фев 2008
Сообщения
31
Реакции
29
В одном из скриптов наткнулся на такую конструкцию
$c=1; while ($c>0) { $text=str_ireplace('</td> ','</td>',$text,$c); }

Я так понимаю, после первого прохода текста делается повторная проверка, чтобы не осталось не замененных участков.

В чём смысл цикла в данном куске кода? Неужели после первого прохода могут остаться не обработанные участки текста?
 
1) я не вижу выхода из цикла. Вы присвоение $c в конце не забыли?
2) читайте ман Для просмотра ссылки Войди или Зарегистрируйся. Четвертый параметр это количество произведенных замен. В вашем случае это всегда одна замена т.к. $c всегда 1.
3) смысл в том, чтобы заменить все </TD> и </Td> и </tD> на </td>. Т.е. смысл сомнительный....
 
1) я не вижу выхода из цикла. Вы присвоение $c в конце не забыли?
2) читайте ман Для просмотра ссылки Войди или Зарегистрируйся. Четвертый параметр это количество произведенных замен. В вашем случае это всегда одна замена т.к. $c всегда 1.
3) смысл в том, чтобы заменить все </TD> и </Td> и </tD> на </td>. Т.е. смысл сомнительный....

1) после первого прохода $c="кол-ву замен" и цикл запускается на второй круг. Во втором круге, по идее, $c=0, т.к. все замены совершены в первом проходе цикла, и цикл прерывается.
Или я не прав?
2) во втором проходе цикла $c=0 (см. пояснение п.1), если я конечно все правильно понимаю
3) смысл
чтобы заменить все </TD> и </Td> и </tD> на </td>
понятен. Вопрос был в том зачем str_ireplace заводить в цикл.
 
Во втором круге, по идее, $c=0
Из чего вы сделали такой вывод?

Тогда код должен был бы выглядеть как-то так:

Код:
$c=1;
 
while ($c>0)
{
if (strpos($text, '</TD>') !== false) {
  $text = str_ireplace('</td> ','</td>',$text,$c);
} else {
  $c = 0;
}
}

Вопрос был в том зачем str_ireplace заводить в цикл.
Ну, если по какой-то причине замены нужно осуществлять по одной, то можно и в цикл. Хотя в данном конкретном примере я не вижу в этом никакого смысла.
 
Из чего вы сделали такой вывод?

Наверно с того что он прав :eek: !?


Тогда код должен был бы выглядеть как-то так:
Хрена лысого.... При инициализацией цикла $c=1; ибо иначе while не заработает. далее после замены она >0 если были замены если были то сново прогон и там уже 0 на какой то из последующих итераций...

Вопрос был в том зачем str_ireplace заводить в цикл.
Смысла делать подобное в приведенном коде нет потому как после 1 замены по идее все значения изменятся.
Но суть потребности в подобном имеется. К примеру:

PHP:
<?php
$c=1;
$text='fhadjfhd fh n dfghsdf d  dfg sdfg sodf  dfsod        dfghsd g  fgjsdfgj sdf df g v    b fb  fg  fg          g f            fdgfg';
 
while ($c>0)
{
    echo $c.'<br>';
    $text=str_ireplace('  ',' ',$text,$c); // Заменяем 2 пробела на 1 если заменить 4 пробела то после 1 прохода появится потребность в ещё 1 проходе.
 
}
 
 
?>
 
Назад
Сверху