Php 为什么它会多次重复一件事?

Php 为什么它会多次重复一件事?,php,xml,Php,Xml,我对这段代码有一些问题,我似乎不知道为什么。它同时发布else回音和span回音两次。我不需要}else echo{?我基本上得到OPEN(x4),而我希望它说OPEN一次 我很没经验(你可能会看到),非常感谢你的帮助 require_once 'feed.php'; $title = 'something'; foreach(Feed('url') as $f ) { if (strpos($f->title, $title) !== false) $gree

我对这段代码有一些问题,我似乎不知道为什么。它同时发布else回音和span回音两次。我不需要
}else echo{
?我基本上得到OPEN(x4),而我希望它说OPEN一次

我很没经验(你可能会看到),非常感谢你的帮助

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>';
        }
    }
}
require_once'feed.php';
$title='something';
foreach(Feed('url')作为$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\u text)===false)?
“关闭”:
"开放",;
}否则{
回声“开放”;
}
if(strpos($f->description,$Maintenance\u text)!==false){
echo(strpos($f->description,$exception\u text)===false)?
“维护”:
"开放",;
}否则{
回声“开放”;
}
}
}
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;
}
?>

首先修复第一个问题,如果它没有
{
的话,我真的认为应该这样做

然后你有两个IF,每个IF都可以输出一条消息,当然大多数情况下至少有一个IF可以,因为它们都在测试不同的东西,所以至少有一个IF失败并转到IF的其他部分

因此,在此处使用
if elseif else
construct只为每个循环提供
OPEN
一次

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>';
            }
        }
    }
}
require_once'feed.php';
$title='ev134';
foreach(饲料)https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=604“)作为$f){
if(strpos($f->title,$title)!==false){
//增加-----------------^
$green_color='green';
$orange_color='orange';
$red_color='red';
$closed_text='stengt';
$Kolonneuø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\u text)===false)?
“关闭”:
"开放",;
}else if(strpos($f->description,$kolonne_text)!==false){
echo(strpos($f->description,$exception\u text)===false)?
“维护”:
"开放",;
}否则{
回声“开放”;
}
}
}
}

首先修复第一个问题,如果它没有
{
的话,我真的认为应该这样做

然后你有两个IF,每个IF都可以输出一条消息,当然大多数情况下至少有一个IF可以,因为它们都在测试不同的东西,所以至少有一个IF失败并转到IF的其他部分

因此,在此处使用
if elseif else
construct只为每个循环提供
OPEN
一次

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>';
            }
        }
    }
}
require_once'feed.php';
$title='ev134';
foreach(饲料)https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=604“)作为$f){
if(strpos($f->title,$title)!==false){
//增加-----------------^
$green_color='green';
$orange_color='orange';
$red_color='red';
$closed_text='stengt';
$Kolonneuø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\u text)===false)?
“关闭”:
"开放",;
}else if(strpos($f->description,$kolonne_text)!==false){
echo(strpos($f->description,$exception\u text)===false)?
“维护”:
"开放",;
}否则{
回声“开放”;
}
}
}
}

您有下面提到的两条符合条件的记录

if (strpos($f->title, $title) !== false){
在这个if条件中,$closed_text&$kolonne_textif条件进入了else部分。所以2次循环2次else部分。这就是为什么你得到了4次跨度。试试下面的1,如果它解决了你的问题,就投上一票

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>';
        }
    }
}
require_once'feed.php';
$title='ev134';
foreach(饲料)https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=604“)作为$f){
$green_color='green';
$orange_color='orange';
$red_color='red';
$closed_text='stengt';
$Kolonneuø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\u text)===false)?
“关闭”:
"开放",;
$open=false;
}
if(strpos($f->description,$kolonne_text)!==false){
echo(strpos($f->description,$exception\u text)===false)?
“维护”:
"开放",;
$open=false;
}
若有($未结){
回声“开放”;
}
}
}
注意:如果两个$closed_text$kolonne_text都满足条件,您将再次面临相同的问题,因此请根据您的业务需要调整代码


您有以下提到的2条符合条件的记录

if (strpos($f->title, $title) !== false){
在这个if条件中,$closed_text&$kolonne_textif条件进入了else部分。所以2次循环2次else部分。这就是为什么你得到了4次跨度。试着在1以下,如果它解决了你的问题,就投上一票