首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找逻辑扫描数组以查找下一个活动时隙

查找逻辑扫描数组以查找下一个活动时隙
EN

Stack Overflow用户
提问于 2021-02-22 07:57:43
回答 1查看 45关注 0票数 1

我试图定义一个逻辑,它将返回一个媒体站每天的下一个直播时间的值。

数组

代码语言:javascript
复制
$liveshows = [
  'mon' => [
                ['start' => '0600', 'end' => '0900', 'host' => 'Joe'],
                ['start' => '1300', 'end' => '1500', 'host' => 'Carol'],
                ['start' => '1500', 'end' => '1600', 'host' => 'Cortez'],
                ['start' => '1700', 'end' => '2100', 'host' => 'Boy George']
              ],
];

过程

代码语言:javascript
复制
date_default_timezone_set('America/New_York');
$day          = strtolower(date('D'));
$current_time = date('Hi');

$html=''; $start=[];
if( $day == 'mon' && !empty( $liveshows['mon'] ) ) 
{
  foreach( $liveshows['mon'] as $showtime ) {
    if( $current_time >= $showtime['start'] && $current_time <= $showtime['end'] )
      $html .= '<h3>' . $showtime['host'] . ' <span>is on air</span></h3>';
      
      // create an array of start times to use in below 'no live show' notice.
      $start[] = $showtime['start'];
  }
}

// print it
echo $html;

在这一点上都工作得很好。

现在,我希望在air上没有活动主机时显示一个通知,因此我使用了current()next()end()来循环$start数组。它工作到一定程度,但是失败了,因为数组count()每天都不一致。

代码语言:javascript
复制
if( empty( $html ) ) 
{
  $nextshow='';
  if( $current_time < current($start) ) {
    $nextshow = current($start);
  }
  elseif( $current_time < next($start) ) {
    $nextshow = next($start);
  }

  echo '<h3>No live show is on</h3>';
  echo '<p>The next live show is at ' . date('g:iA', strtotime( $nextshow )) . '</p>';
}

检索时的输出通知是:

从午夜开始

下一场直播节目是早上6:00

在第一场和下一场表演之间

下一场直播节目是下午1:00

在1600 (4PM)显示结束时间之后,进程失败,输出没有下一个数组的5PM值,只是.

下一个直播节目是

如何正确地扫描数组并与当前时间进行比较,以检查是否打开了一个显示,如果没有,则显示下一个显示的时间行吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-22 08:54:57

我认为在您的情况下使用current/next非常麻烦。您可以通过跟踪任何显示是否在air $isOnAir = true/false上(在下面的代码中)来大大简化代码,如果没有,只需在不同的条件下重复显示数组。

示例:

代码语言:javascript
复制
<?php
declare(strict_types=1);

date_default_timezone_set('America/New_York');

$day          = strtolower(date('D'));
$current_time = date('Hi');

// test
$day          = 'mon';
$current_time = '1630';

$liveshows = [
    'mon' => [
        ['start' => '0600', 'end' => '0900', 'host' => 'Joe'],
        ['start' => '1300', 'end' => '1500', 'host' => 'Carol'],
        ['start' => '1500', 'end' => '1600', 'host' => 'Cortez'],
        ['start' => '1700', 'end' => '2100', 'host' => 'Boy George'],
    ],
];

if ($day === 'mon' && !empty($liveshows['mon'])) {
    // assume no show is on air
    $isOnAir = false;

    foreach ($liveshows['mon'] as $showtime) {
        if ($showtime['start'] <= $current_time && $current_time <= $showtime['end']) {
            // we have a show on air
            $isOnAir = true;

            // output
            echo '<h3>', $showtime['host'], ' <span>is on air</span></h3>';

            // break loop
            break;
        }
    }

    // without a show on air (see above)
    if (!$isOnAir) {
        echo '<h3>No live show is on</h3>';

        foreach ($liveshows['mon'] as $showtime) {
            // find the first where start > current
            if ($current_time < $showtime['start']) {
                // output
                echo '<p>The next live show is at ', date('g:iA', strtotime($showtime['start'])), '</p>';

                // and break loop
                break;
            }
        }
    }
}

https://3v4l.org/ZKcjo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66311911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档