Помогите с циклами.

Тема в разделе "Как сделать...", создана пользователем QuZ, 13 фев 2012.

  1. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    Добрый вечер. Помогите пожалуйста разобраться с циклом. Привел кусок кода, он правильно работает, если $pizza встречается какой-либо элемент из массива $tag. Проблема в том, что если мы не находим в данной строке какого-либо из элемента массива, тогда по коду получаем пустое значение в переменной $trimmed. Вот эту проблему и хотелось решить. Если мы находим какой-либо элемент из массива в данной строке - то в переменную $trimmed заносим отрезанную часть, иначе, в переменную $trimmed заносим $pizza..
    Спасибо, форумчанам.



    PHP:
    {
        
    $i "0";
        
    $tags = array ('>','прав.}','линзов.]');
        
    $pizza  "фара} п}ер}.прав. серая линзов. Xenon D2S";
     
        foreach (
    $tags as $tag)
        {
        
    $piecess explode($tag$pizza);
            
    $i count ($piecess);
            if (
    $i >1)
            {
                
    $pieces explode($tag$pizza);
                
    $trimmed ltrim($pieces[1]);
            }
        }
        echo 
    trim ($trimmed ."<br>");
    }
     
  2. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    не вникал суть... потому что чет вообще не вкуриваю потребностей...
    Если после обработки переменная пастая то после цыкла проверьте и переровняйте и все...
     
  3. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    Код полный бред....

    Вы заносите постоянно при нахождении следовательно сохроняется только последнее найденое.
    Если нужны все значения то используйте $trimmed[] = ltrim($pieces[1]);
    Далее для распечатки implode('<br>', $trimmed); для обработки запустите цыкл.

    Если же всетаки у вас логика именно такая катороя описана то

    PHP:
    {
        
    $i "0";
        
    $tags = array ('>','прав.}','линзов.]');
        
    $pizza  "фара} п}ер}.прав. серая линзов. Xenon D2S";
     
        foreach (
    $tags as $tag)
        {
        
    $piecess explode($tag$pizza);
            
    $i count ($piecess);
            if (
    $i >1)
            {
                
    $pieces explode($tag$pizza);
                
    $trimmed ltrim($pieces[1]);
            }
        }
        
    $trimmed=trim($trimmed);
    if (
    $trimmed==''$trimmed=$pizza;
     
    echo 
    $trimmed.'<br>';
    }
     
  4. ywitodenasuby

    ywitodenasuby Постоялец

    Заблокирован
    Регистр.:
    31 янв 2012
    Сообщения:
    65
    Симпатии:
    21
    Код:
    $i = "0";
        $tags = array ('>','прав.}','линзов.]');
        $pizza  = "фара} п}ер}.прав. серая> линзов. Xenon D2S";
     
        foreach ($tags as $tag)
        {
        $piecess = explode($tag, $pizza);
            $i = count ($piecess);
            if ($i >1)
            {
                $pieces = explode($tag, $pizza);
                $trimmed = ltrim($pieces[1]);
            }
            elseif($i <= 1)
            {
              $trimmed = $pizza;
            }
        }
        echo trim ($trimmed ."<br>");
     
  5. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    Какой вообще смысл обходить весь цыкл !?
    Переверните масив и при первой находке сделайте break; если так и не вылетит сначит переровняете и все.
    Таким образом меньшая работа проделана будит ибо если вы считаете проблему в коде только с конечным значением в случае отсутствия нахождений тегов потому как ваш код ведет учет только последнего тега а не всех.
     
  6. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    Парни, мне скинули для пользования) Я читать код умею, писать - не пишу. Что тут написано - понимаю)) Человек, который писал это - не знаком с пхп - это видно. По поводу того, что он записывает последний найденный вариант - пока не особо важно, так-как я знаю, что будет максимум 1-на замена на строчку.
     
  7. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Омг!
    Тогда зачем захламлять код циклом?!
    Лучше будет если вы поясните первоначальную задачу что вам вообще нужно было сделать. Тогда вам намного быстрее помогут, чем обсуждать этот непонятный кусок кода с холостым циклом.
     
  8. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    Не проблема. Делаю выгрузку из базы в массив строчки. Достаточно большое кол-во. Необходимо для каждой строчки проверить, имеется ли в ней набор слов, которые были занесены в массив. В моем примере ($tags) и если имеется - тогда отрезать по этому тегу все что после него из строчку из массива, иначе - передать в переменную строчку целиком.
     
  9. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Нужно определить вхождение всех слов из $tags или одного из массива?
    А что делать если слов попадается 2? По какому отрезать? По первому?
     
  10. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    74
    Симпатии:
    49
    Всех слов. По поводу повторения - на данный момент такого не предвидится, это уже конечная доводка массива. Но наверное, лучший вариант - если встретится 2-ва тега - то обрезать по обоим.