为了账号安全,请及时绑定邮箱和手机立即绑定

仅显示 if 语句循环中的第一项

仅显示 if 语句循环中的第一项

PHP
jeck猫 2022-09-24 10:34:19
此代码:require_once 'feed.php';$title = 'Ev 134';ob_start();foreach(Feed('example.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 = 'could be';        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.';text-shadow: 2px 2px #a50000;">closed</span>' :                    '<span style="color:'.$green_color.'">Open</span>' ;            } else 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>';            }        }    }}$status = ob_get_contents();ob_end_clean();echo $status;从道路输出当前天气报告。打开/关闭或维护。我的问题:可能会有可能导致或我不想要的输出。openopenmaintenanceopen我试过:if ($status = 'OpenOpen'){  $status = 'Open';}但是对于所有可能的情况来说,它都很复杂和混乱+它不能很好地工作。我想要什么:如果有多个报告只显示第一个,并在文本后面放*。任何帮助都非常感谢!
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

此代码进行了一些更改。


这不是使用输出缓冲,而只是将值设置为全通。这允许您检查是否已设置以前的值并添加到末尾,或者如果它到达循环的末尾并且仍然为空,则可以设置打开的文本。$status*$status


我还将静态文本分配移到了循环之外,因为您不需要每次都设置它们。


最后你有两次,所以这删除了那个...if (strpos($f->title, $title) !== false)


$green_color    = 'green';

$orange_color   = 'orange';

$red_color      = 'red';

$closed_text    = 'closed';

$maintenance_text   = 'maintenance';

$exception_text = 'could be';


$status = "";

$records = 0;

foreach(Feed('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=604') as $f ) {

    $records++;

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

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

            // If no previous value, set main text,otherwise add *

            if ( empty($status) )   {

                $status = (strpos($f->description, $exception_text) === false) ?

                    '<span style="color:'.$red_color.';text-shadow: 2px 2px #a50000;">closed</span>'

                    : '<span style="color:'.$green_color.'">Open</span>' ;

            }

            else    {

                $status .= "*";

            }


        } 

        else if(strpos($f->description, $maintenance_text) !== false){

            if ( empty($status) )   {

                $status = (strpos($f->description, $exception_text) === false) ?

                    '<span style="color:'.$orange_color.'">maintenance</span>' :

                    '<span style="color:'.$green_color.'">Open</span>' ;


            }

            else    {

                $status .= "*";

            }

        }

    }

}


// If still empty, say open

if ( empty ( $status ) ){

    $status = '<span>Open</span>';

    if ( $records > 0 ) {

        $status.="*";

    }

}

echo $status;

您可以在设置橙色和红色部分时删除测试,如果 文本中有 ,则忽略该项目。(strpos($f->description, $exception_text) === false)$exception_text


查看完整回答
反对 回复 2022-09-24
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信