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

QuZ

Постоялец
Регистрация
18 Июл 2009
Сообщения
86
Реакции
50
Добрый вечер. Помогите пожалуйста разобраться с циклом. Привел кусок кода, он правильно работает, если $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>");
}
 
не вникал суть... потому что чет вообще не вкуриваю потребностей...
Если после обработки переменная пастая то после цыкла проверьте и переровняйте и все...
 
Код полный бред....

Вы заносите постоянно при нахождении следовательно сохроняется только последнее найденое.
Если нужны все значения то используйте $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
Код:
$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>");
 
Какой вообще смысл обходить весь цыкл !?
Переверните масив и при первой находке сделайте break; если так и не вылетит сначит переровняете и все.
Таким образом меньшая работа проделана будит ибо если вы считаете проблему в коде только с конечным значением в случае отсутствия нахождений тегов потому как ваш код ведет учет только последнего тега а не всех.
 
Парни, мне скинули для пользования) Я читать код умею, писать - не пишу. Что тут написано - понимаю)) Человек, который писал это - не знаком с пхп - это видно. По поводу того, что он записывает последний найденный вариант - пока не особо важно, так-как я знаю, что будет максимум 1-на замена на строчку.
 
Омг!
По поводу того, что он записывает последний найденный вариант - пока не особо важно, так-как я знаю, что будет максимум 1-на замена на строчку.
Тогда зачем захламлять код циклом?!
Лучше будет если вы поясните первоначальную задачу что вам вообще нужно было сделать. Тогда вам намного быстрее помогут, чем обсуждать этот непонятный кусок кода с холостым циклом.
 
Не проблема. Делаю выгрузку из базы в массив строчки. Достаточно большое кол-во. Необходимо для каждой строчки проверить, имеется ли в ней набор слов, которые были занесены в массив. В моем примере ($tags) и если имеется - тогда отрезать по этому тегу все что после него из строчку из массива, иначе - передать в переменную строчку целиком.
 
Необходимо для каждой строчки проверить, имеется ли в ней набор слов, которые были занесены в массив. В моем примере ($tags) и если имеется - тогда отрезать по этому тегу все что после него из строчку из массива, иначе - передать в переменную строчку целиком.
Нужно определить вхождение всех слов из $tags или одного из массива?
А что делать если слов попадается 2? По какому отрезать? По первому?
 
Нужно определить вхождение всех слов из $tags или одного из массива?
А что делать если слов попадается 2? По какому отрезать? По первому?
Всех слов. По поводу повторения - на данный момент такого не предвидится, это уже конечная доводка массива. Но наверное, лучший вариант - если встретится 2-ва тега - то обрезать по обоим.
 
Назад
Сверху