Php 搜索连续数组值的运行

Php 搜索连续数组值的运行,php,arrays,foreach,Php,Arrays,Foreach,我正在为计算机服务器开发一个简单的调度程序,需要使用此阵列: Array ( [Mon] => false, [Tues] => true, [Wed] => false, [Thurs] => true, [Fri] => true, [Sat] => true, [Sun] => false ) 并获得如下返回的数组: Array ( 'Thurs', 'Fri', 'Sat' ) 基本上

我正在为计算机服务器开发一个简单的调度程序,需要使用此阵列:

Array 
( 
   [Mon] => false, 
   [Tues] => true, 
   [Wed] => false,
   [Thurs] => true, 
   [Fri] => true,
   [Sat] => true,
   [Sun] => false
)
并获得如下返回的数组:

Array
(
   'Thurs', 'Fri', 'Sat'
)
基本上,我在寻找数组在一行中有两次以上的
True
的实例。可能是周一,周二,周三,可能是周五,周六,周日,但不可能是周一,周三,周四

我的第一个想法是把每一种可能性和硬编码作为一个数组,然后通过每一种可能性,但是它花费的时间太长,而且感觉很草率


谢谢

以下内容可以在任意天数内使用

$days = array('Mon' => 'false', 'Tues' => 'true', 
              'Wed' => 'false', 'Thurs' => 'true', 
              'Fri' => 'true', 'Sat' => 'true', 
              'Sun' => 'false');

while ($day = array_shift($days)) {
        if($day == next($days)) {
            $result[] = array_search($day, $days)."<br/>";
        }
} 
print_r($result);

这将返回3的第一个序列,如果不存在这样的序列,则返回空数组:

function getDays(array $schedule) {

    $sequence = array();

    foreach($schedule as $day => $value) {
        if($value) {
            $sequence[] = $day;

            // check if we have enough trues to exit
            if(count($sequence) > 2) {
                break;
            }
        }
        else {
            // we found a false, so reset any existing sequence
            $sequence = array();
        }
    }

    return $sequence;
}

$schedule = array( 
       'Mon' => false, 
       'Tues' => true, 
       'Wed' => false,
       'Thurs' => true, 
       'Fri' => true,
       'Sat' => true,
       'Sun' => false
    );

print_r(getDays($schedule));
输出:

Array
(
    [0] => Thurs
    [1] => Fri
    [2] => Sat
)

如果,比如说,除了星期四,所有的日子都是真的,那么你想要什么输出呢?注意:未定义的偏移量:7谢谢,我已经解决了这个问题。使用字符串是完全错误的!!布尔值为false,如果您使用使用实数布尔的原始输入数组,则代码会在@cske:查看OP的数组时中断。它使用字符串,而不是布尔值。我用的是问题中给出的内容。@Amal Murali:不管怎样,(字符串)false不被视为false),而且不需要数组搜索,简单的键($days)做一些小技巧你正在更改OP的数组。我认为它们是字符串,不是布尔值;我没有注意到。因为这是一个微不足道的改变,而不是一个不正确的解决方案,而且布尔在这种情况下更有意义,所以我将保持原样。我不相信它应该被否决。这是更好的解决方案,但不是OP所要求的。是的,我已经取消了否决票+1.
function getDays(array $schedule) {

    $sequence = array();

    foreach($schedule as $day => $value) {
        if($value) {
            $sequence[] = $day;

            // check if we have enough trues to exit
            if(count($sequence) > 2) {
                break;
            }
        }
        else {
            // we found a false, so reset any existing sequence
            $sequence = array();
        }
    }

    return $sequence;
}

$schedule = array( 
       'Mon' => false, 
       'Tues' => true, 
       'Wed' => false,
       'Thurs' => true, 
       'Fri' => true,
       'Sat' => true,
       'Sun' => false
    );

print_r(getDays($schedule));
Array
(
    [0] => Thurs
    [1] => Fri
    [2] => Sat
)