почему это повторяется одно и то же несколько раз? - PullRequest
1 голос
/ 04 февраля 2020

У меня есть некоторые проблемы с этим кодом, и я не могу понять, почему. Он публикует как else-эхо, так и span-эхо дважды. Разве мне не нужен }else echo{? Я в основном получаю OPENOPENOPENOPEN (x4), когда хочу, чтобы он сказал «ОТКРЫТЬ» один раз.

Я довольно неопытный (как вы могли бы видеть), каждая помощь очень ценится!

require_once 'feed.php';

$title = 'something';

foreach(Feed('url') as $f ) {
    if (strpos($f->title, $title) !== false)
        $green_color    = 'green';

    $orange_color   = 'orange';
    $red_color      = 'red';
    $closed_text    = 'closed';
    $Maintenance_text   = 'Maintenance';
    $exception_text = 'maybe';

    if (strpos($f->title, $title) !== false){

        if(strpos($f->description, $closed_text) !== false){
            echo (strpos($f->description, $exception_text) === false) ?
                 '<span style="color:'.$red_color.'">CLOSED</span>' :
                '<span style="color:'.$green_color.'">OPEN</span>' ;
        }else{
            echo '<span>OPEN</span>';
        }

        if(strpos($f->description, $Maintenance_text) !== false){
            echo (strpos($f->description, $exception_text) === false) ?
                 '<span style="color:'.$orange_color.'">MAINTENANCE</span>' :
                 '<span style="color:'.$green_color.'">OPEN</span>' ;

        }else{
            echo '<span>OPEN</span>';
        }
    }
}

Feed. php

<?php
$url = ('url');

function Feed($url) {
    $feed = simplexml_load_file($url) or die('cant connect');
    $result = array();
    foreach ($feed->channel->item as $content) {
        array_push($result, $content);
    } 
    return $result;
}
?>

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

У вас есть 2 удовлетворенные записи из нижеприведенного условия if.

if (strpos($f->title, $title) !== false){

Внутри этого условия if Оба $ closed_text & $ kolonne_text если условия входят в другое часть. Таким образом, 2 раза зацикливание 2 раза еще часть. Вот почему вы получили 4 раза SPAN. Попробуйте ниже одного и дайте UPVOTE, если это решит вашу проблему.

require_once 'feed.php';

$title = 'Ev 134';

foreach(Feed('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=604') as $f ) {
    $green_color    = 'green';
    $orange_color   = 'orange';
    $red_color      = 'red';
    $closed_text    = 'stengt';
    $kolonne_text   = 'Kolonnekjøring';
    $exception_text = 'kan bli';
    $open = true;
    if (strpos($f->title, $title) !== false){


        if(strpos($f->description, $closed_text) !== false){
            echo (strpos($f->description, $exception_text) === false) ?
                 '<span style="color:'.$red_color.'">CLOSED</span>' :
                '<span style="color:'.$green_color.'">OPEN</span>' ;
            $open = false;
        }

        if(strpos($f->description, $kolonne_text) !== false){
            echo (strpos($f->description, $exception_text) === false) ?
                 '<span style="color:'.$orange_color.'">MAINTENANCE</span>' :
                 '<span style="color:'.$green_color.'">OPEN</span>' ;
            $open = false;

        }
        if($open) {
            echo '<span>OPEN</span>';
        }
    }
}

Примечание: Если оба $ closed_text & $ kolonne_text если условия вас устраивают снова столкнется с той же проблемой, поэтому настройте код в соответствии с потребностями вашего бизнеса.

0 голосов
/ 04 февраля 2020

Сначала исправьте первый IF, который не имеет {, когда я действительно думаю, что он должен

Затем у вас есть 2 IF, где каждый может вывести сообщение, и, конечно, в большинстве случаев, по крайней мере, один из них будет потому что они оба проверяют $f->description на разные вещи, поэтому, по крайней мере, один ДОЛЖЕН НЕ УКАЗАТЬСЯ и go в ELSE часть IF

. Поэтому используйте здесь if elseif else, чтобы получить только OPEN один раз за л oop.

require_once 'feed.php';

$title = 'Ev 134';

foreach(Feed('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=604') as $f ) {
    if (strpos($f->title, $title) !== false) {
//    added --------------                   ^
        $green_color    = 'green';

        $orange_color   = 'orange';
        $red_color      = 'red';
        $closed_text    = 'stengt';
        $kolonne_text   = 'Kolonnekjøring';
        $exception_text = 'kan bli';

        if (strpos($f->title, $title) !== false){

            if(strpos($f->description, $closed_text) !== false){
                echo (strpos($f->description, $exception_text) === false) ?
                     '<span style="color:'.$red_color.'">CLOSED</span>' :
                    '<span style="color:'.$green_color.'">OPEN</span>' ;

            } else if(strpos($f->description, $kolonne_text) !== false){
                echo (strpos($f->description, $exception_text) === false) ?
                     '<span style="color:'.$orange_color.'">MAINTENANCE</span>' :
                     '<span style="color:'.$green_color.'">OPEN</span>' ;

            } else {
                echo '<span>OPEN</span>';
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...