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

Тема в разделе "PHP", создана пользователем alexsnz75, 19 фев 2012.

Модераторы: latteo
  1. alexsnz75

    alexsnz75 Создатель

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

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

    В чём смысл цикла в данном куске кода? Неужели после первого прохода могут остаться не обработанные участки текста?
     
  2. cmd

    cmd Создатель

    Регистр.:
    24 авг 2011
    Сообщения:
    25
    Симпатии:
    2
    1) я не вижу выхода из цикла. Вы присвоение $c в конце не забыли?
    2) читайте ман str_ireplace. Четвертый параметр это количество произведенных замен. В вашем случае это всегда одна замена т.к. $c всегда 1.
    3) смысл в том, чтобы заменить все </TD> и </Td> и </tD> на </td>. Т.е. смысл сомнительный....
     
  3. alexsnz75

    alexsnz75 Создатель

    Регистр.:
    6 фев 2008
    Сообщения:
    31
    Симпатии:
    29
    1) после первого прохода $c="кол-ву замен" и цикл запускается на второй круг. Во втором круге, по идее, $c=0, т.к. все замены совершены в первом проходе цикла, и цикл прерывается.
    Или я не прав?
    2) во втором проходе цикла $c=0 (см. пояснение п.1), если я конечно все правильно понимаю
    3) смысл
    понятен. Вопрос был в том зачем str_ireplace заводить в цикл.
     
  4. cmd

    cmd Создатель

    Регистр.:
    24 авг 2011
    Сообщения:
    25
    Симпатии:
    2
    Из чего вы сделали такой вывод?

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

    Код:
    $c=1;
     
    while ($c>0)
    {
    if (strpos($text, '</TD>') !== false) {
      $text = str_ireplace('</td> ','</td>',$text,$c);
    } else {
      $c = 0;
    }
    }
    Ну, если по какой-то причине замены нужно осуществлять по одной, то можно и в цикл. Хотя в данном конкретном примере я не вижу в этом никакого смысла.
     
  5. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    Наверно с того что он прав :eek: !?


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

    Смысла делать подобное в приведенном коде нет потому как после 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 проходе.
     
    }
     
     
    ?>
     
    alexsnz75 и cmd нравится это.
  6. cmd

    cmd Создатель

    Регистр.:
    24 авг 2011
    Сообщения:
    25
    Симпатии:
    2
    Точно... пойду съем шляпу. Я перепутал предназначения count для str_ireplace с limit для preg_replace.