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
)