【问题标题】:How to check for multiple sequences in 1 array PHP如何检查 1 个数组 PHP 中的多个序列
【发布时间】:2017-07-16 10:04:43
【问题描述】:

我一直在为我的问题寻找解决方案,但找不到,所以我想我会问。 我目前有一个数组,其中包含一家公司开业的天数,从这些天开始我就有了数值。

因此,如果一家公司每周 7 天营业,我会:

$days= array('0','1','2','3','4','5','6');

如果公司在星期四关闭,则数组将更改为:

$days= array('0','1','2','4','5','6');'

现在我的最终目标是获得所有连续天的第一天和最后一天。 所以在第一个例子中是 0-6。

对于第二个示例(因为公司仅在星期四关闭),我想显示:星期五至星期三,因此是 4-2。

有人对此有任何想法吗?因为我很困。

【问题讨论】:

  • 您希望包装日期(而不是执行“周一至周三,周五至周日”),这很困难。您希望 array(0, 2, 4, 6) 之类的返回什么?
  • 只是天分开值 0、2、4、6
  • 那么在这种情况下它应该给Monday, Wednesday, Friday, Sunday?还是Wednesday, Friday, Sunday-Monday?还是什么?
  • 这个函数的输入是什么?
  • 如果公司在两天内关门怎么办?周二和周四?输出会是什么?

标签: php arrays sequence days


【解决方案1】:

您可以使用以下代码,它适用于单个关闭日甚至多个关闭日。

$days= array('0','1','2','4','5','6');
$closed_days = range(1,max($days));   
$missing = array_diff($closed_days,$days);

$start_day = $days[0];
$end_day = $days[count($days) -1];

if(count($missing)>0){
    $first_key = key($missing);
    $next_key = $first_key+count($missing) - 1;
    if(count($missing) == 1){
        $next_key++;
    }
    $previous_key = $first_key;

    $start_day = $days[$next_key];
    $end_day = $days[$previous_key];
}

echo $start_day.'-'.$end_day;

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多